Change Signature: Replace isConstructor flag with enum. Fix signature preview
This commit is contained in:
@@ -41,6 +41,7 @@ import kotlin.properties.Delegates
|
|||||||
import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList
|
import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList
|
||||||
import org.jetbrains.kotlin.idea.project.*
|
import org.jetbrains.kotlin.idea.project.*
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetMethodDescriptor.Kind
|
||||||
|
|
||||||
public class JetChangeInfo(
|
public class JetChangeInfo(
|
||||||
val methodDescriptor: JetMethodDescriptor,
|
val methodDescriptor: JetMethodDescriptor,
|
||||||
@@ -149,30 +150,34 @@ public class JetChangeInfo(
|
|||||||
public fun getNewSignature(inheritedFunction: JetFunctionDefinitionUsage<PsiElement>): String {
|
public fun getNewSignature(inheritedFunction: JetFunctionDefinitionUsage<PsiElement>): String {
|
||||||
val buffer = StringBuilder()
|
val buffer = StringBuilder()
|
||||||
|
|
||||||
if (isConstructor) {
|
val defaultVisibility = if (kind.isConstructor) Visibilities.PUBLIC else Visibilities.INTERNAL
|
||||||
|
|
||||||
|
if (kind == Kind.PRIMARY_CONSTRUCTOR) {
|
||||||
buffer.append(name)
|
buffer.append(name)
|
||||||
|
|
||||||
if (newVisibility != Visibilities.PUBLIC) {
|
if (newVisibility != defaultVisibility) {
|
||||||
buffer.append(' ').append(newVisibility).append(' ')
|
buffer.append(' ').append(newVisibility).append(' ')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (newVisibility != Visibilities.INTERNAL) {
|
if (newVisibility != defaultVisibility) {
|
||||||
buffer.append(newVisibility).append(' ')
|
buffer.append(newVisibility).append(' ')
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer.append(JetTokens.FUN_KEYWORD).append(' ')
|
buffer.append(if (kind == Kind.SECONDARY_CONSTRUCTOR) JetTokens.CONSTRUCTOR_KEYWORD else JetTokens.FUN_KEYWORD).append(' ')
|
||||||
}
|
|
||||||
|
|
||||||
receiverParameterInfo?.let {
|
if (kind == Kind.FUNCTION) {
|
||||||
buffer.append(it.currentTypeText).append('.')
|
receiverParameterInfo?.let {
|
||||||
}
|
buffer.append(it.currentTypeText).append('.')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
buffer.append(name)
|
buffer.append(name)
|
||||||
|
}
|
||||||
|
|
||||||
buffer.append(getNewParametersSignature(inheritedFunction))
|
buffer.append(getNewParametersSignature(inheritedFunction))
|
||||||
|
|
||||||
if (newReturnType != null && !KotlinBuiltIns.isUnit(newReturnType) && !isConstructor)
|
if (newReturnType != null && !KotlinBuiltIns.isUnit(newReturnType) && kind == Kind.FUNCTION)
|
||||||
buffer.append(": ").append(newReturnTypeText)
|
buffer.append(": ").append(newReturnTypeText)
|
||||||
|
|
||||||
return buffer.toString()
|
return buffer.toString()
|
||||||
@@ -272,7 +277,7 @@ public class JetChangeInfo(
|
|||||||
public val JetChangeInfo.originalBaseFunctionDescriptor: FunctionDescriptor
|
public val JetChangeInfo.originalBaseFunctionDescriptor: FunctionDescriptor
|
||||||
get() = methodDescriptor.baseDescriptor
|
get() = methodDescriptor.baseDescriptor
|
||||||
|
|
||||||
public val JetChangeInfo.isConstructor: Boolean get() = methodDescriptor.isConstructor
|
public val JetChangeInfo.kind: Kind get() = methodDescriptor.kind
|
||||||
|
|
||||||
public val JetChangeInfo.oldName: String?
|
public val JetChangeInfo.oldName: String?
|
||||||
get() = (methodDescriptor.getMethod() as? JetFunction)?.getName()
|
get() = (methodDescriptor.getMethod() as? JetFunction)?.getName()
|
||||||
|
|||||||
+15
-9
@@ -56,6 +56,7 @@ import org.jetbrains.kotlin.idea.JetFileType;
|
|||||||
import org.jetbrains.kotlin.idea.refactoring.JetRefactoringBundle;
|
import org.jetbrains.kotlin.idea.refactoring.JetRefactoringBundle;
|
||||||
import org.jetbrains.kotlin.psi.JetTypeCodeFragment;
|
import org.jetbrains.kotlin.psi.JetTypeCodeFragment;
|
||||||
import org.jetbrains.kotlin.types.JetType;
|
import org.jetbrains.kotlin.types.JetType;
|
||||||
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetMethodDescriptor.Kind;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
@@ -91,10 +92,15 @@ public class JetChangeSignatureDialog extends ChangeSignatureDialogBase<
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected JetCallableParameterTableModel createParametersInfoModel(JetMethodDescriptor descriptor) {
|
protected JetCallableParameterTableModel createParametersInfoModel(JetMethodDescriptor descriptor) {
|
||||||
if (ChangeSignaturePackage.getIsConstructor(descriptor))
|
switch (descriptor.getKind()) {
|
||||||
return new JetConstructorParameterTableModel(myDefaultValueContext);
|
case FUNCTION:
|
||||||
else
|
return new JetFunctionParameterTableModel(descriptor, myDefaultValueContext);
|
||||||
return new JetFunctionParameterTableModel(descriptor, myDefaultValueContext);
|
case PRIMARY_CONSTRUCTOR:
|
||||||
|
return new JetPrimaryConstructorParameterTableModel(myDefaultValueContext);
|
||||||
|
case SECONDARY_CONSTRUCTOR:
|
||||||
|
return new JetSecondaryConstructorParameterTableModel(myDefaultValueContext);
|
||||||
|
}
|
||||||
|
throw new AssertionError("Invalid kind: " + descriptor.getKind());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -118,7 +124,7 @@ public class JetChangeSignatureDialog extends ChangeSignatureDialogBase<
|
|||||||
JPanel panel = new JPanel(new BorderLayout());
|
JPanel panel = new JPanel(new BorderLayout());
|
||||||
String valOrVar = "";
|
String valOrVar = "";
|
||||||
|
|
||||||
if (ChangeSignaturePackage.getIsConstructor(myMethod)) {
|
if (myMethod.getKind() == Kind.PRIMARY_CONSTRUCTOR) {
|
||||||
switch (item.parameter.getValOrVar()) {
|
switch (item.parameter.getValOrVar()) {
|
||||||
case None:
|
case None:
|
||||||
valOrVar = " ";
|
valOrVar = " ";
|
||||||
@@ -263,7 +269,7 @@ public class JetChangeSignatureDialog extends ChangeSignatureDialogBase<
|
|||||||
Document document = PsiDocumentManager.getInstance(getProject()).getDocument(item.defaultValueCodeFragment);
|
Document document = PsiDocumentManager.getInstance(getProject()).getDocument(item.defaultValueCodeFragment);
|
||||||
component = editor = new EditorTextField(document, getProject(), getFileType());
|
component = editor = new EditorTextField(document, getProject(), getFileType());
|
||||||
}
|
}
|
||||||
else if (JetConstructorParameterTableModel.isValVarColumn(columnInfo)) {
|
else if (JetPrimaryConstructorParameterTableModel.isValVarColumn(columnInfo)) {
|
||||||
JComboBox comboBox = new JComboBox(JetValVar.values());
|
JComboBox comboBox = new JComboBox(JetValVar.values());
|
||||||
comboBox.setSelectedItem(item.parameter.getValOrVar());
|
comboBox.setSelectedItem(item.parameter.getValOrVar());
|
||||||
comboBox.addItemListener(new ItemListener() {
|
comboBox.addItemListener(new ItemListener() {
|
||||||
@@ -321,7 +327,7 @@ public class JetChangeSignatureDialog extends ChangeSignatureDialogBase<
|
|||||||
public Object getValueAt(int column) {
|
public Object getValueAt(int column) {
|
||||||
ColumnInfo columnInfo = myParametersTableModel.getColumnInfos()[column];
|
ColumnInfo columnInfo = myParametersTableModel.getColumnInfos()[column];
|
||||||
|
|
||||||
if (JetConstructorParameterTableModel.isValVarColumn(columnInfo))
|
if (JetPrimaryConstructorParameterTableModel.isValVarColumn(columnInfo))
|
||||||
return ((JComboBox) components.get(column)).getSelectedItem();
|
return ((JComboBox) components.get(column)).getSelectedItem();
|
||||||
else if (JetCallableParameterTableModel.isTypeColumn(columnInfo))
|
else if (JetCallableParameterTableModel.isTypeColumn(columnInfo))
|
||||||
return item.typeCodeFragment;
|
return item.typeCodeFragment;
|
||||||
@@ -347,7 +353,7 @@ public class JetChangeSignatureDialog extends ChangeSignatureDialogBase<
|
|||||||
new int[] { 4, getParamNamesMaxLength(), getTypesMaxLength() };
|
new int[] { 4, getParamNamesMaxLength(), getTypesMaxLength() };
|
||||||
int columnIndex = 0;
|
int columnIndex = 0;
|
||||||
|
|
||||||
for (int i = ChangeSignaturePackage.getIsConstructor(myMethod) ? 0 : 1; i < columnLetters.length; i ++) {
|
for (int i = myMethod.getKind() == Kind.PRIMARY_CONSTRUCTOR ? 0 : 1; i < columnLetters.length; i ++) {
|
||||||
int width = getColumnWidth(columnLetters[i]);
|
int width = getColumnWidth(columnLetters[i]);
|
||||||
|
|
||||||
if (x <= width)
|
if (x <= width)
|
||||||
@@ -365,7 +371,7 @@ public class JetChangeSignatureDialog extends ChangeSignatureDialogBase<
|
|||||||
MouseEvent me = getMouseEvent();
|
MouseEvent me = getMouseEvent();
|
||||||
int index = me != null
|
int index = me != null
|
||||||
? getEditorIndex((int) me.getPoint().getX())
|
? getEditorIndex((int) me.getPoint().getX())
|
||||||
: ChangeSignaturePackage.getIsConstructor(myMethod) ? 1 : 0;
|
: myMethod.getKind() == Kind.PRIMARY_CONSTRUCTOR ? 1 : 0;
|
||||||
JComponent component = components.get(index);
|
JComponent component = components.get(index);
|
||||||
return component instanceof EditorTextField ? ((EditorTextField) component).getFocusTarget() : component;
|
return component instanceof EditorTextField ? ((EditorTextField) component).getFocusTarget() : component;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -48,7 +48,7 @@ public class JetChangeSignatureProcessor extends ChangeSignatureProcessorBase {
|
|||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
protected UsageViewDescriptor createUsageViewDescriptor(UsageInfo[] usages) {
|
protected UsageViewDescriptor createUsageViewDescriptor(UsageInfo[] usages) {
|
||||||
String subject = ChangeSignaturePackage.getIsConstructor(getChangeInfo()) ? "constructor" : "function";
|
String subject = ChangeSignaturePackage.getKind(getChangeInfo()).getIsConstructor() ? "constructor" : "function";
|
||||||
return new JetUsagesViewDescriptor(myChangeInfo.getMethod(), RefactoringBundle.message("0.to.change.signature", subject));
|
return new JetUsagesViewDescriptor(myChangeInfo.getMethod(), RefactoringBundle.message("0.to.change.signature", subject));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-6
@@ -61,10 +61,7 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
|||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver;
|
||||||
import org.jetbrains.kotlin.types.JetType;
|
import org.jetbrains.kotlin.types.JetType;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class JetChangeSignatureUsageProcessor implements ChangeSignatureUsageProcessor {
|
public class JetChangeSignatureUsageProcessor implements ChangeSignatureUsageProcessor {
|
||||||
@Override
|
@Override
|
||||||
@@ -347,7 +344,8 @@ public class JetChangeSignatureUsageProcessor implements ChangeSignatureUsagePro
|
|||||||
|
|
||||||
JetScope functionScope = RefactoringPackage.getContainingScope(oldDescriptor, bindingContext);
|
JetScope functionScope = RefactoringPackage.getContainingScope(oldDescriptor, bindingContext);
|
||||||
|
|
||||||
if (!ChangeSignaturePackage.getIsConstructor(changeInfo) && functionScope != null && !info.getNewName().isEmpty()) {
|
JetMethodDescriptor.Kind kind = ChangeSignaturePackage.getKind(changeInfo);
|
||||||
|
if (!kind.getIsConstructor() && functionScope != null && !info.getNewName().isEmpty()) {
|
||||||
for (FunctionDescriptor conflict : functionScope.getFunctions(Name.identifier(info.getNewName()))) {
|
for (FunctionDescriptor conflict : functionScope.getFunctions(Name.identifier(info.getNewName()))) {
|
||||||
if (conflict == oldDescriptor) continue;
|
if (conflict == oldDescriptor) continue;
|
||||||
|
|
||||||
@@ -369,7 +367,7 @@ public class JetChangeSignatureUsageProcessor implements ChangeSignatureUsagePro
|
|||||||
result.putValue(element, "Duplicating parameter '" + parameterName + "'");
|
result.putValue(element, "Duplicating parameter '" + parameterName + "'");
|
||||||
}
|
}
|
||||||
if (parametersScope != null) {
|
if (parametersScope != null) {
|
||||||
if (ChangeSignaturePackage.getIsConstructor(changeInfo) && valOrVar != JetValVar.None) {
|
if (kind == JetMethodDescriptor.Kind.PRIMARY_CONSTRUCTOR && valOrVar != JetValVar.None) {
|
||||||
for (VariableDescriptor property : parametersScope.getProperties(Name.identifier(parameterName))) {
|
for (VariableDescriptor property : parametersScope.getProperties(Name.identifier(parameterName))) {
|
||||||
PsiElement propertyDeclaration = DescriptorToSourceUtils.descriptorToDeclaration(property);
|
PsiElement propertyDeclaration = DescriptorToSourceUtils.descriptorToDeclaration(property);
|
||||||
|
|
||||||
|
|||||||
+15
-3
@@ -26,6 +26,21 @@ import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
|
|||||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||||
|
|
||||||
public trait JetMethodDescriptor : MethodDescriptor<JetParameterInfo, Visibility> {
|
public trait JetMethodDescriptor : MethodDescriptor<JetParameterInfo, Visibility> {
|
||||||
|
enum class Kind(val isConstructor: Boolean) {
|
||||||
|
FUNCTION: Kind(false)
|
||||||
|
PRIMARY_CONSTRUCTOR: Kind(true)
|
||||||
|
SECONDARY_CONSTRUCTOR: Kind(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
val kind: Kind get() {
|
||||||
|
val descriptor = baseDescriptor
|
||||||
|
return when {
|
||||||
|
descriptor !is ConstructorDescriptor -> Kind.FUNCTION
|
||||||
|
descriptor.isPrimary() -> Kind.PRIMARY_CONSTRUCTOR
|
||||||
|
else -> Kind.SECONDARY_CONSTRUCTOR
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val baseDeclaration: PsiElement
|
val baseDeclaration: PsiElement
|
||||||
val baseDescriptor: FunctionDescriptor
|
val baseDescriptor: FunctionDescriptor
|
||||||
|
|
||||||
@@ -36,9 +51,6 @@ public trait JetMethodDescriptor : MethodDescriptor<JetParameterInfo, Visibility
|
|||||||
val receiver: JetParameterInfo?
|
val receiver: JetParameterInfo?
|
||||||
}
|
}
|
||||||
|
|
||||||
val JetMethodDescriptor.isConstructor: Boolean
|
|
||||||
get() = baseDescriptor is ConstructorDescriptor
|
|
||||||
|
|
||||||
fun JetMethodDescriptor.renderOriginalReturnType(): String =
|
fun JetMethodDescriptor.renderOriginalReturnType(): String =
|
||||||
baseDescriptor.getReturnType()?.let { IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.renderType(it) } ?: ""
|
baseDescriptor.getReturnType()?.let { IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.renderType(it) } ?: ""
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -28,8 +28,8 @@ import javax.swing.*;
|
|||||||
import javax.swing.table.TableCellEditor;
|
import javax.swing.table.TableCellEditor;
|
||||||
import javax.swing.table.TableCellRenderer;
|
import javax.swing.table.TableCellRenderer;
|
||||||
|
|
||||||
public class JetConstructorParameterTableModel extends JetCallableParameterTableModel {
|
public class JetPrimaryConstructorParameterTableModel extends JetCallableParameterTableModel {
|
||||||
public JetConstructorParameterTableModel(PsiElement context) {
|
public JetPrimaryConstructorParameterTableModel(PsiElement context) {
|
||||||
super(context,
|
super(context,
|
||||||
new ValVarColumn(),
|
new ValVarColumn(),
|
||||||
new NameColumn(context.getProject()),
|
new NameColumn(context.getProject()),
|
||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2015 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.idea.refactoring.changeSignature;
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement;
|
||||||
|
import com.intellij.refactoring.changeSignature.ParameterTableModelItemBase;
|
||||||
|
import org.jetbrains.kotlin.idea.JetFileType;
|
||||||
|
|
||||||
|
public class JetSecondaryConstructorParameterTableModel extends JetCallableParameterTableModel {
|
||||||
|
public JetSecondaryConstructorParameterTableModel(PsiElement context) {
|
||||||
|
super(context,
|
||||||
|
new NameColumn(context.getProject()),
|
||||||
|
new TypeColumn(context.getProject(), JetFileType.INSTANCE),
|
||||||
|
new DefaultValueColumn<JetParameterInfo, ParameterTableModelItemBase<JetParameterInfo>>(context.getProject(), JetFileType.INSTANCE));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user