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.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<ExtractFunctionParameterTablePanel.ParameterInfo> newParameterInfos,
@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.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<String>,
val visibility: String,
val visibility: KtModifierKeywordToken?,
val parameters: List<Parameter>,
val receiverParameter: Parameter?,
val typeParameters: List<TypeParameter>,
@@ -364,7 +365,7 @@ data class ExtractableCodeDescriptor(
fun ExtractableCodeDescriptor.copy(
newName: String,
newVisibility: String,
newVisibility: KtModifierKeywordToken?,
oldToNewParameters: Map<Parameter, Parameter>,
newReceiver: Parameter?,
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.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<KtDeclaration>()
if (parent is KtClass) {
if (parent.isInterface()) return ""
if (parent.isEnum() && commonParent.getNonStrictParentOfType<KtEnumEntry>()?.getStrictParentOfType<KtClass>() == parent) return ""
if (parent.isInterface()) return null
if (parent.isEnum() && commonParent.getNonStrictParentOfType<KtEnumEntry>()?.getStrictParentOfType<KtClass>() == parent) return null
}
return "private"
return KtTokens.PRIVATE_KEYWORD
}
fun ExtractionData.performAnalysis(): AnalysisResult {
@@ -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 = " "))
@@ -269,7 +269,7 @@ class KotlinIntroduceParameterDialog private constructor(
val newDescriptor = KotlinExtractFunctionDialog.createNewDescriptor(
oldDescriptor,
chosenName,
"",
null,
parameterTablePanel?.selectedReceiverInfo,
parameterTablePanel?.selectedParameterInfos ?: listOf(),
null