From e01df0a6454215ae1a8dac494cc6cba7289e293e Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 16 Oct 2013 11:18:59 +0200 Subject: [PATCH] IDEA-114874 Live templates: don't allow editing $END$ and $SELECTION$ variables remove special SELECTION var treatment, allow it to be non-var --- .../impl/LiveTemplateSettingsEditor.java | 29 +++++++------------ .../template/impl/TemplateImpl.java | 4 +-- .../template/impl/TemplateImplUtil.java | 29 ++++--------------- 3 files changed, 18 insertions(+), 44 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplateSettingsEditor.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplateSettingsEditor.java index 134143df4782..868cf2fcb09c 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplateSettingsEditor.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/LiveTemplateSettingsEditor.java @@ -481,7 +481,7 @@ public class LiveTemplateSettingsEditor extends JPanel { } private void validateEditVariablesButton() { - myEditVariablesButton.setEnabled(!parseVariables(myTemplateEditor.getDocument().getCharsSequence()).isEmpty()); + myEditVariablesButton.setEnabled(!parseVariables().isEmpty()); } void resetUi() { @@ -552,20 +552,11 @@ public class LiveTemplateSettingsEditor extends JPanel { } }); - - ArrayList parsedVariables = parseVariables(myTemplateEditor.getDocument().getCharsSequence()); - - Map newVariableNames = new HashMap(); - for (Object parsedVariable : parsedVariables) { - Variable newVariable = (Variable)parsedVariable; - String name = newVariable.getName(); - newVariableNames.put(name, name); - } + Map newVariableNames = parseVariables(); int oldVariableNumber = 0; - for(int i = 0; i < parsedVariables.size(); i++){ - Variable variable = parsedVariables.get(i); - if(oldVariableNames.contains(variable.getName())) { + for (Map.Entry entry : newVariableNames.entrySet()) { + if(oldVariableNames.contains(entry.getKey())) { Variable oldVariable = null; for(;oldVariableNumber(newVariableNames.values()); } private List getCurrentVariables() { @@ -623,10 +614,10 @@ public class LiveTemplateSettingsEditor extends JPanel { }, modalityState); } - private static ArrayList parseVariables(CharSequence text) { - ArrayList variables = new ArrayList(); - TemplateImplUtil.parseVariables(text, variables, TemplateImpl.INTERNAL_VARS_SET); - return variables; + private Map parseVariables() { + Map map = TemplateImplUtil.parseVariables(myTemplateEditor.getDocument().getCharsSequence()); + map.keySet().removeAll(TemplateImpl.INTERNAL_VARS_SET); + return map; } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateImpl.java index 5782f567e029..c7520a9733af 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateImpl.java @@ -409,8 +409,8 @@ public class TemplateImpl extends Template implements SchemeElement { } public boolean isSelectionTemplate() { - for (Variable v : myVariables) { - if (v.getName().equals(SELECTION)) return true; + for (Segment v : mySegments) { + if (v.name.equals(SELECTION)) return true; } return false; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateImplUtil.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateImplUtil.java index 21eee1596333..822541023bfd 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateImplUtil.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateImplUtil.java @@ -18,20 +18,16 @@ package com.intellij.codeInsight.template.impl; import com.intellij.codeInsight.template.Expression; import com.intellij.psi.tree.IElementType; +import com.intellij.util.containers.hash.LinkedHashMap; import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.Set; /** * @author Maxim.Mossienko */ public class TemplateImplUtil { - private TemplateImplUtil() { - } - public static void parseVariables(CharSequence text, ArrayList variables, @Nullable Set predefinedVars) { + public static LinkedHashMap parseVariables(CharSequence text) { + LinkedHashMap variables = new LinkedHashMap(); TemplateTextLexer lexer = new TemplateTextLexer(); lexer.start(text); @@ -43,26 +39,13 @@ public class TemplateImplUtil { String token = text.subSequence(start, end).toString(); if (tokenType == TemplateTokenType.VARIABLE){ String name = token.substring(1, token.length() - 1); - boolean isFound = false; - - if (predefinedVars!=null && predefinedVars.contains(name) && !name.equals(TemplateImpl.SELECTION)){ - isFound = true; - } - else{ - for (Variable variable : variables) { - if (variable.getName().equals(name)) { - isFound = true; - break; - } - } - } - - if (!isFound){ - variables.add(new Variable(name, "", "", true)); + if (!variables.containsKey(name)){ + variables.put(name, new Variable(name, "", "", true)); } } lexer.advance(); } + return variables; } public static Expression parseTemplate(@NonNls String text) {