From 2f8bf24819e04b9da0cde90a905b5c68b4445660 Mon Sep 17 00:00:00 2001 From: m0rkeulv Date: Sun, 25 Aug 2024 13:58:25 +0200 Subject: [PATCH] Add static keyword to method when extracting from other static members --- .../extractMethod/ExtractMethodBuilder.java | 10 ++++++++++ .../HaxeExtractMethodHandler.java | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/main/java/com/intellij/plugins/haxe/ide/refactoring/extractMethod/ExtractMethodBuilder.java b/src/main/java/com/intellij/plugins/haxe/ide/refactoring/extractMethod/ExtractMethodBuilder.java index a7a42d581..c731f1b7d 100644 --- a/src/main/java/com/intellij/plugins/haxe/ide/refactoring/extractMethod/ExtractMethodBuilder.java +++ b/src/main/java/com/intellij/plugins/haxe/ide/refactoring/extractMethod/ExtractMethodBuilder.java @@ -36,6 +36,8 @@ public class ExtractMethodBuilder { private Map localUsedOutside; private Map parametersMap; + private boolean needsStaticKeyword = false; + public ExtractMethodBuilder expressions(List expressions) { this.expressions = expressions; return this; @@ -247,6 +249,7 @@ private String buildMethod(String suggestedName, String block, Map parameters) { return parameters.entrySet().stream().map(entry -> { String paramName = entry.getKey(); @@ -355,4 +362,7 @@ else if (!localUsedOutside.isEmpty()) { } + public void isStatic(boolean needsStaticKeyword) { + this.needsStaticKeyword = needsStaticKeyword; + } } diff --git a/src/main/java/com/intellij/plugins/haxe/ide/refactoring/extractMethod/HaxeExtractMethodHandler.java b/src/main/java/com/intellij/plugins/haxe/ide/refactoring/extractMethod/HaxeExtractMethodHandler.java index a8bbf2f21..4d7f52b63 100644 --- a/src/main/java/com/intellij/plugins/haxe/ide/refactoring/extractMethod/HaxeExtractMethodHandler.java +++ b/src/main/java/com/intellij/plugins/haxe/ide/refactoring/extractMethod/HaxeExtractMethodHandler.java @@ -13,6 +13,8 @@ import com.intellij.plugins.haxe.ide.refactoring.introduceVariable.HaxeIntroduceHandler; import com.intellij.plugins.haxe.ide.refactoring.introduceVariable.HaxeIntroduceOperation; import com.intellij.plugins.haxe.lang.psi.*; +import com.intellij.plugins.haxe.model.HaxeFieldModel; +import com.intellij.plugins.haxe.model.HaxeModel; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.util.PsiTreeUtil; @@ -96,6 +98,8 @@ protected void performAction(HaxeIntroduceOperation operation) { .expressions(expressions); try { + + methodBuilder.isStatic(needsStaticKeyword(startElement)); methodBuilder.validateAndProcessExpressions(); boolean partOfExpression = stopElement.getParent().getParent() instanceof HaxeExpression; @@ -152,6 +156,20 @@ protected void performAction(HaxeIntroduceOperation operation) { } + private static boolean needsStaticKeyword(PsiElement startElement) { + HaxeMethod parentMethod = PsiTreeUtil.getParentOfType(startElement, HaxeMethodDeclaration.class); + if (parentMethod != null) { + return parentMethod.getModel().isStatic(); + } + HaxeVarInit init = PsiTreeUtil.getParentOfType(startElement, HaxeVarInit.class); + HaxeFieldDeclaration fieldDeclaration = PsiTreeUtil.getParentOfType(startElement, HaxeFieldDeclaration.class); + if (init != null && fieldDeclaration != null) { + HaxeModel model = fieldDeclaration.getModel(); + if( model instanceof HaxeFieldModel fieldModel) return fieldModel.isStatic(); + } + return false; + } + private static void startRenameMethod(HaxeIntroduceOperation operation, Editor editor, PsiFile file) { int newSelectionEnd = editor.getSelectionModel().getSelectionEnd();