From 89ea4d5a85634dffff1df1fd3c56cd48412f3a9f Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Sat, 4 Oct 2014 00:33:05 +0400 Subject: [PATCH] More quickfixes to use API for setting type ref --- .../quickfix/ChangeFunctionReturnTypeFix.java | 20 ++++--------------- .../quickfix/ChangeParameterTypeFix.java | 4 +--- .../usages/JetFunctionDefinitionUsage.java | 13 +++++------- 3 files changed, 10 insertions(+), 27 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeFunctionReturnTypeFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeFunctionReturnTypeFix.java index 41dbe4e4725..0f9b5630e5d 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeFunctionReturnTypeFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeFunctionReturnTypeFix.java @@ -20,7 +20,6 @@ import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiErrorElement; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; @@ -108,26 +107,15 @@ public class ChangeFunctionReturnTypeFix extends JetIntentionAction changeFunctionLiteralReturnTypeFix.invoke(project, editor, file); } else { - element.setReturnTypeRef(null); if (!(KotlinBuiltIns.getInstance().isUnit(type) && element.hasBlockBody())) { - addReturnTypeAnnotation(element, renderedType); + element.setReturnTypeRef(JetPsiFactory(project).createType(renderedType)); + } + else { + element.setReturnTypeRef(null); } } } - public static void addReturnTypeAnnotation(JetFunction function, String typeText) { - PsiElement elementToPrecedeType = function.getValueParameterList(); - if (elementToPrecedeType == null) elementToPrecedeType = function.getNameIdentifier(); - assert elementToPrecedeType != null : "Return type of function without name can't mismatch anything"; - if (elementToPrecedeType.getNextSibling() instanceof PsiErrorElement) { - // if a function doesn't have a value parameter list, a syntax error is raised, and it should follow the function name - elementToPrecedeType = elementToPrecedeType.getNextSibling(); - } - JetPsiFactory psiFactory = JetPsiFactory(function); - function.addAfter(psiFactory.createType(typeText), elementToPrecedeType); - function.addAfter(psiFactory.createColon(), elementToPrecedeType); - } - @NotNull public static JetMultiDeclarationEntry getMultiDeclarationEntryThatTypeMismatchComponentFunction(Diagnostic diagnostic) { Name componentName = COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH.cast(diagnostic).getA(); diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeParameterTypeFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeParameterTypeFix.java index f03d00e322c..1430f55dcc0 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeParameterTypeFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeParameterTypeFix.java @@ -65,8 +65,6 @@ public class ChangeParameterTypeFix extends JetIntentionAction { @Override public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException { - JetTypeReference typeReference = element.getTypeReference(); - assert typeReference != null : "Parameter without type annotation cannot cause type mismatch"; - typeReference.replace(JetPsiFactory(file).createType(renderedType)); + element.setTypeRef(JetPsiFactory(file).createType(renderedType)); } } diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/usages/JetFunctionDefinitionUsage.java b/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/usages/JetFunctionDefinitionUsage.java index 5283519caa4..6d251ac5786 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/usages/JetFunctionDefinitionUsage.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/usages/JetFunctionDefinitionUsage.java @@ -24,7 +24,6 @@ import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lexer.JetKeywordToken; import org.jetbrains.jet.lexer.JetTokens; import org.jetbrains.jet.plugin.quickfix.AddModifierFix; -import org.jetbrains.jet.plugin.quickfix.ChangeFunctionReturnTypeFix; import org.jetbrains.jet.plugin.quickfix.ChangeVisibilityModifierFix; import org.jetbrains.jet.plugin.refactoring.JetRefactoringUtil; import org.jetbrains.jet.plugin.refactoring.changeSignature.JetChangeInfo; @@ -62,8 +61,9 @@ public class JetFunctionDefinitionUsage extends JetUsageInfo { String returnTypeText = changeInfo.getNewReturnTypeText(); //TODO use ChangeFunctionReturnTypeFix.invoke when JetTypeCodeFragment.getType() is ready - if (!KotlinBuiltIns.getInstance().getUnitType().toString().equals(returnTypeText)) - ChangeFunctionReturnTypeFix.addReturnTypeAnnotation(function, returnTypeText); + if (!KotlinBuiltIns.getInstance().getUnitType().toString().equals(returnTypeText)) { + function.setReturnTypeRef(JetPsiFactory(function).createType(returnTypeText)); + } } } else @@ -138,11 +138,8 @@ public class JetFunctionDefinitionUsage extends JetUsageInfo { } if (parameterInfo.isTypeChanged()) { - JetTypeReference newType = psiFactory.createType(parameterInfo.getTypeText()); - JetTypeReference typeReference = parameter.getTypeReference(); - - if (typeReference != null) - typeReference.replace(newType); + JetTypeReference newTypeRef = psiFactory.createType(parameterInfo.getTypeText()); + parameter.setTypeRef(newTypeRef); } PsiElement identifier = parameter.getNameIdentifier();