Misc: Use KtToken to represent visibility in ExtractableCodeDescriptor

This commit is contained in:
Alexey Sedunov
2018-06-07 19:52:48 +03:00
parent b1693acfcd
commit 633c67ebf0
5 changed files with 23 additions and 17 deletions
@@ -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.extractionEngine.*;
import org.jetbrains.kotlin.idea.refactoring.introduce.ui.KotlinSignatureComponent; import org.jetbrains.kotlin.idea.refactoring.introduce.ui.KotlinSignatureComponent;
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers; import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers;
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken;
import org.jetbrains.kotlin.lexer.KtTokens; import org.jetbrains.kotlin.lexer.KtTokens;
import org.jetbrains.kotlin.psi.psiUtil.KtPsiUtilKt; import org.jetbrains.kotlin.psi.psiUtil.KtPsiUtilKt;
import org.jetbrains.kotlin.types.KotlinType; import org.jetbrains.kotlin.types.KotlinType;
@@ -94,11 +95,12 @@ public class KotlinExtractFunctionDialog extends DialogWrapper {
return KtPsiUtilKt.quoteIfNeeded(functionNameField.getEnteredName()); return KtPsiUtilKt.quoteIfNeeded(functionNameField.getEnteredName());
} }
private String getVisibility() { @Nullable
if (!isVisibilitySectionAvailable()) return ""; private KtModifierKeywordToken getVisibility() {
if (!isVisibilitySectionAvailable()) return null;
String value = (String) visibilityBox.getSelectedItem(); KtModifierKeywordToken value = (KtModifierKeywordToken) visibilityBox.getSelectedItem();
return KtTokens.PUBLIC_KEYWORD.getValue().equals(value) ? "" : value; return KtTokens.DEFAULT_VISIBILITY_KEYWORD.equals(value) ? null : value;
} }
private boolean checkNames() { private boolean checkNames() {
@@ -174,12 +176,14 @@ public class KotlinExtractFunctionDialog extends DialogWrapper {
returnTypePanel.getParent().remove(returnTypePanel); returnTypePanel.getParent().remove(returnTypePanel);
} }
visibilityBox.setModel(new DefaultComboBoxModel(KtTokens.VISIBILITY_MODIFIERS.getTypes()));
boolean enableVisibility = isVisibilitySectionAvailable(); boolean enableVisibility = isVisibilitySectionAvailable();
visibilityBox.setEnabled(enableVisibility); visibilityBox.setEnabled(enableVisibility);
if (enableVisibility) { if (enableVisibility) {
String defaultVisibility = extractableCodeDescriptor.getVisibility(); KtModifierKeywordToken defaultVisibility = extractableCodeDescriptor.getVisibility();
if (defaultVisibility.isEmpty()) { if (defaultVisibility != null) {
defaultVisibility = KtTokens.PUBLIC_KEYWORD.getValue(); defaultVisibility = KtTokens.DEFAULT_VISIBILITY_KEYWORD;
} }
visibilityBox.setSelectedItem(defaultVisibility); visibilityBox.setSelectedItem(defaultVisibility);
} }
@@ -275,7 +279,7 @@ public class KotlinExtractFunctionDialog extends DialogWrapper {
public static ExtractableCodeDescriptor createNewDescriptor( public static ExtractableCodeDescriptor createNewDescriptor(
@NotNull ExtractableCodeDescriptor originalDescriptor, @NotNull ExtractableCodeDescriptor originalDescriptor,
@NotNull String newName, @NotNull String newName,
@NotNull String newVisibility, @Nullable KtModifierKeywordToken newVisibility,
@Nullable ExtractFunctionParameterTablePanel.ParameterInfo newReceiverInfo, @Nullable ExtractFunctionParameterTablePanel.ParameterInfo newReceiverInfo,
@NotNull List<ExtractFunctionParameterTablePanel.ParameterInfo> newParameterInfos, @NotNull List<ExtractFunctionParameterTablePanel.ParameterInfo> newParameterInfos,
@Nullable KotlinType returnType @Nullable KotlinType returnType
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.idea.util.approximateFlexibleTypes
import org.jetbrains.kotlin.idea.util.psi.patternMatching.KotlinPsiRange import org.jetbrains.kotlin.idea.util.psi.patternMatching.KotlinPsiRange
import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.lexer.KtKeywordToken import org.jetbrains.kotlin.lexer.KtKeywordToken
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.psi.psiUtil.*
@@ -349,7 +350,7 @@ data class ExtractableCodeDescriptor(
val extractionData: ExtractionData, val extractionData: ExtractionData,
val originalContext: BindingContext, val originalContext: BindingContext,
val suggestedNames: List<String>, val suggestedNames: List<String>,
val visibility: String, val visibility: KtModifierKeywordToken?,
val parameters: List<Parameter>, val parameters: List<Parameter>,
val receiverParameter: Parameter?, val receiverParameter: Parameter?,
val typeParameters: List<TypeParameter>, val typeParameters: List<TypeParameter>,
@@ -364,7 +365,7 @@ data class ExtractableCodeDescriptor(
fun ExtractableCodeDescriptor.copy( fun ExtractableCodeDescriptor.copy(
newName: String, newName: String,
newVisibility: String, newVisibility: KtModifierKeywordToken?,
oldToNewParameters: Map<Parameter, Parameter>, oldToNewParameters: Map<Parameter, Parameter>,
newReceiver: Parameter?, newReceiver: Parameter?,
returnType: KotlinType? returnType: KotlinType?
@@ -56,6 +56,7 @@ import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
import org.jetbrains.kotlin.idea.util.approximateWithResolvableType import org.jetbrains.kotlin.idea.util.approximateWithResolvableType
import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.idea.util.getResolutionScope
import org.jetbrains.kotlin.idea.util.isResolvableInScope import org.jetbrains.kotlin.idea.util.isResolvableInScope
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.psi.psiUtil.*
@@ -613,16 +614,16 @@ fun ExtractionData.isVisibilityApplicable(): Boolean {
return true return true
} }
fun ExtractionData.getDefaultVisibility(): String { fun ExtractionData.getDefaultVisibility(): KtModifierKeywordToken? {
if (!isVisibilityApplicable()) return "" if (!isVisibilityApplicable()) return null
val parent = targetSibling.getStrictParentOfType<KtDeclaration>() val parent = targetSibling.getStrictParentOfType<KtDeclaration>()
if (parent is KtClass) { if (parent is KtClass) {
if (parent.isInterface()) return "" if (parent.isInterface()) return null
if (parent.isEnum() && commonParent.getNonStrictParentOfType<KtEnumEntry>()?.getStrictParentOfType<KtClass>() == parent) return "" if (parent.isEnum() && commonParent.getNonStrictParentOfType<KtEnumEntry>()?.getStrictParentOfType<KtClass>() == parent) return null
} }
return "private" return KtTokens.PRIVATE_KEYWORD
} }
fun ExtractionData.performAnalysis(): AnalysisResult { fun ExtractionData.performAnalysis(): AnalysisResult {
@@ -65,7 +65,7 @@ private fun buildSignature(config: ExtractionGeneratorConfiguration, renderer: D
else -> CallableBuilder.Target.READ_ONLY_PROPERTY else -> CallableBuilder.Target.READ_ONLY_PROPERTY
} }
return CallableBuilder(builderTarget).apply { return CallableBuilder(builderTarget).apply {
val visibility = config.descriptor.visibility val visibility = config.descriptor.visibility?.value ?: ""
val extraModifiers = config.descriptor.modifiers.map { it.value } val extraModifiers = config.descriptor.modifiers.map { it.value }
val modifiers = if (visibility.isNotEmpty()) listOf(visibility) + extraModifiers else extraModifiers val modifiers = if (visibility.isNotEmpty()) listOf(visibility) + extraModifiers else extraModifiers
modifier(modifiers.joinToString(separator = " ")) modifier(modifiers.joinToString(separator = " "))
@@ -269,7 +269,7 @@ class KotlinIntroduceParameterDialog private constructor(
val newDescriptor = KotlinExtractFunctionDialog.createNewDescriptor( val newDescriptor = KotlinExtractFunctionDialog.createNewDescriptor(
oldDescriptor, oldDescriptor,
chosenName, chosenName,
"", null,
parameterTablePanel?.selectedReceiverInfo, parameterTablePanel?.selectedReceiverInfo,
parameterTablePanel?.selectedParameterInfos ?: listOf(), parameterTablePanel?.selectedParameterInfos ?: listOf(),
null null