diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/JetChangeSignatureData.java b/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/JetChangeSignatureData.java index 8fac53959e1..479f2b16355 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/JetChangeSignatureData.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/JetChangeSignatureData.java @@ -73,13 +73,15 @@ public final class JetChangeSignatureData implements JetMethodDescriptor { @Override public JetParameterInfo fun(ValueParameterDescriptor param) { JetParameter parameter = valueParameters != null ? valueParameters.get(param.getIndex()) : null; - return new JetParameterInfo( + JetParameterInfo parameterInfo = new JetParameterInfo( param.getIndex(), param.getName().asString(), param.getType(), parameter != null ? parameter.getDefaultValue() : null, parameter != null ? parameter.getValOrVarNode() : null ); + parameterInfo.setModifierList(parameter != null ? parameter.getModifierList() : null); + return parameterInfo; } })); } diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/JetParameterInfo.java b/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/JetParameterInfo.java index 45d1aa1555c..fe18e58b5a9 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/JetParameterInfo.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/JetParameterInfo.java @@ -24,6 +24,7 @@ import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.descriptors.impl.AnonymousFunctionDescriptor; import org.jetbrains.jet.lang.psi.JetExpression; +import org.jetbrains.jet.lang.psi.JetModifierList; import org.jetbrains.jet.lang.psi.JetParameter; import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils; import org.jetbrains.jet.lang.types.JetType; @@ -42,6 +43,7 @@ public class JetParameterInfo implements ParameterInfo { private String defaultValueText = ""; private JetValVar valOrVar; @Nullable private JetExpression defaultValue; + @Nullable JetModifierList modifierList; public JetParameterInfo(int oldIndex, String name, JetType type, @Nullable JetExpression defaultValue, @Nullable ASTNode valOrVar) { this.oldIndex = oldIndex; @@ -174,6 +176,15 @@ public class JetParameterInfo implements ParameterInfo { return type; } + @Nullable + public JetModifierList getModifierList() { + return modifierList; + } + + public void setModifierList(@Nullable JetModifierList modifierList) { + this.modifierList = modifierList; + } + public boolean requiresExplicitType(@NotNull JetFunctionDefinitionUsage inheritedFunction) { FunctionDescriptor inheritedFunctionDescriptor = inheritedFunction.getOriginalFunctionDescriptor(); if (!(inheritedFunctionDescriptor instanceof AnonymousFunctionDescriptor)) return true; @@ -189,8 +200,12 @@ public class JetParameterInfo implements ParameterInfo { public String getDeclarationSignature(int parameterIndex, @NotNull JetFunctionDefinitionUsage inheritedFunction) { StringBuilder buffer = new StringBuilder(); - JetValVar valVar = getValOrVar(); + if (modifierList != null) { + buffer.append(modifierList.getText()).append(' '); + } + + JetValVar valVar = getValOrVar(); if (valVar != JetValVar.None) { buffer.append(valVar.toString()).append(' '); } diff --git a/idea/testData/refactoring/changeSignature/ParameterModifiersAfter.kt b/idea/testData/refactoring/changeSignature/ParameterModifiersAfter.kt new file mode 100644 index 00000000000..0de49e4ab6f --- /dev/null +++ b/idea/testData/refactoring/changeSignature/ParameterModifiersAfter.kt @@ -0,0 +1,3 @@ +annotation class foo(val n: Int) + +class Test([foo(1) foo(2)] [foo(3)] private val s: String, n: Int) \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/ParameterModifiersBefore.kt b/idea/testData/refactoring/changeSignature/ParameterModifiersBefore.kt new file mode 100644 index 00000000000..c62289b0d81 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/ParameterModifiersBefore.kt @@ -0,0 +1,3 @@ +annotation class foo(val n: Int) + +class Test([foo(1) foo(2)] [foo(3)] private val s: String) \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/refactoring/changeSignature/JetChangeSignatureTest.java b/idea/tests/org/jetbrains/jet/plugin/refactoring/changeSignature/JetChangeSignatureTest.java index 50039c74e26..24440c2e4db 100644 --- a/idea/tests/org/jetbrains/jet/plugin/refactoring/changeSignature/JetChangeSignatureTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/refactoring/changeSignature/JetChangeSignatureTest.java @@ -553,6 +553,12 @@ public class JetChangeSignatureTest extends KotlinCodeInsightTestCase { doTest(changeInfo); } + public void testParameterModifiers() throws Exception { + JetChangeInfo changeInfo = getChangeInfo(); + changeInfo.addParameter(new JetParameterInfo("n", KotlinBuiltIns.getInstance().getIntType())); + doTest(changeInfo); + } + @NotNull @Override protected String getTestDataPath() {