From 09cda9711132fb7ada46e47cac1f584d1dd0d2b0 Mon Sep 17 00:00:00 2001 From: Vladimir Panimaskin Date: Thu, 13 Jan 2022 09:52:08 +0300 Subject: [PATCH] WEB-54300 fixed renaming variables holding return value of useState GitOrigin-RevId: c14b119252619d34a0da7efb49a10a3a2c43b1bb --- .../template/TemplateBuilderImpl.java | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/platform/analysis-impl/src/com/intellij/codeInsight/template/TemplateBuilderImpl.java b/platform/analysis-impl/src/com/intellij/codeInsight/template/TemplateBuilderImpl.java index b7a5d82d477d..eaa0f7a3d23c 100644 --- a/platform/analysis-impl/src/com/intellij/codeInsight/template/TemplateBuilderImpl.java +++ b/platform/analysis-impl/src/com/intellij/codeInsight/template/TemplateBuilderImpl.java @@ -5,6 +5,7 @@ package com.intellij.codeInsight.template; import com.intellij.codeInsight.template.impl.ConstantNode; import com.intellij.codeInsight.template.impl.NonInteractiveTemplateUtil; import com.intellij.codeInsight.template.impl.TemplateImpl; +import com.intellij.codeInsight.template.impl.Variable; import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; @@ -25,11 +26,9 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.DocumentUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; +import java.util.*; public class TemplateBuilderImpl implements TemplateBuilder { private final RangeMarker myContainerElement; @@ -44,6 +43,8 @@ public class TemplateBuilderImpl implements TemplateBuilder { private RangeMarker mySelection; private final Document myDocument; private final PsiFile myFile; + private Comparator myVariableComparator; + private static final Logger LOG = Logger.getInstance(TemplateBuilderImpl.class); public TemplateBuilderImpl(@NotNull PsiElement element) { @@ -176,6 +177,10 @@ public class TemplateBuilderImpl implements TemplateBuilder { myElements.add(mySelection); } + public void setVariableOrdering(@Nullable Comparator comparator) { + myVariableComparator = comparator; + } + public Template buildInlineTemplate() { return initInlineTemplate(buildTemplate()); } @@ -270,8 +275,27 @@ public class TemplateBuilderImpl implements TemplateBuilder { template.setToIndent(false); template.setToReformat(false); + orderTemplateVariables(template); + return template; } + + private void orderTemplateVariables(Template template) { + if (myVariableComparator == null || !(template instanceof TemplateImpl)) { + return; + } + + TemplateImpl templateImpl = ((TemplateImpl)template); + List variables = new ArrayList<>(templateImpl.getVariables()); + variables.sort(myVariableComparator); + for (int i = variables.size() - 1; i >= 0; i--) { + templateImpl.removeVariable(i); + } + for (Variable variable : variables) { + templateImpl.addVariable(variable); + } + } + private String getDocumentTextFragment(final int startOffset, final int endOffset) { return myDocument.getCharsSequence().subSequence(startOffset, endOffset).toString(); }