removed out.println() usages
[fedora-idea.git] / lang-impl / src / com / intellij / codeInsight / template / impl / TemplateImpl.java
blob17ab09561c6bdd8d1e21d883d1853079fdfafc84
1 package com.intellij.codeInsight.template.impl;
3 import com.intellij.codeInsight.template.Expression;
4 import com.intellij.codeInsight.template.Template;
5 import com.intellij.openapi.util.text.StringUtil;
6 import com.intellij.psi.tree.IElementType;
7 import org.jetbrains.annotations.NonNls;
9 import java.util.ArrayList;
10 import java.util.Arrays;
11 import java.util.HashSet;
12 import java.util.Set;
14 /**
17 public class TemplateImpl implements Template {
18 private String myKey;
19 private String myString = null;
20 private String myDescription;
21 private String myGroupName;
22 private char myShortcutChar = TemplateSettings.DEFAULT_CHAR;
23 private ArrayList<Variable> myVariables = new ArrayList<Variable>();
24 private ArrayList<Segment> mySegments = null;
25 private String myTemplateText = null;
26 private String myId;
28 public boolean equals(Object o) {
29 if (this == o) return true;
30 if (!(o instanceof TemplateImpl)) return false;
32 final TemplateImpl template = (TemplateImpl) o;
33 if (myId != null && template.myId != null && myId.equals(template.myId)) return true;
35 if (isToReformat != template.isToReformat) return false;
36 if (isToShortenLongNames != template.isToShortenLongNames) return false;
37 if (myShortcutChar != template.myShortcutChar) return false;
38 if (myDescription != null ? !myDescription.equals(template.myDescription) : template.myDescription != null) return false;
39 if (myGroupName != null ? !myGroupName.equals(template.myGroupName) : template.myGroupName != null) return false;
40 if (myKey != null ? !myKey.equals(template.myKey) : template.myKey != null) return false;
41 if (myString != null ? !myString.equals(template.myString) : template.myString != null) return false;
42 if (myTemplateText != null ? !myTemplateText.equals(template.myTemplateText) : template.myTemplateText != null) return false;
44 if (myVariables == null && template.myVariables == null) return true;
45 if (myVariables == null || template.myVariables == null) return false;
46 if (myVariables.size() != template.myVariables.size()) return false;
47 for (Variable variable : myVariables) {
48 if (template.myVariables.indexOf(variable) < 0) return false;
51 return true;
54 public int hashCode() {
55 if (myId != null) {
56 return myId.hashCode();
58 int result;
59 result = myKey.hashCode();
60 result = 29 * result + (myString == null ? 0 : myString.hashCode());
61 result = 29 * result + myGroupName.hashCode();
62 return result;
65 private boolean isToReformat = false;
66 private boolean isToShortenLongNames = true;
67 private boolean toParseSegments = true;
68 private TemplateContext myTemplateContext = new TemplateContext();
70 public static final @NonNls String END = "END";
71 public static final @NonNls String SELECTION = "SELECTION";
72 public static final @NonNls String SELECTION_START = "SELECTION_START";
73 public static final @NonNls String SELECTION_END = "SELECTION_END";
75 public static final Set<String> INTERNAL_VARS_SET = new HashSet<String>(Arrays.asList(
76 END, SELECTION, SELECTION_START, SELECTION_END));
78 private boolean isDeactivated = false;
80 public boolean isInline() {
81 return myIsInline;
84 private boolean isToIndent = true;
87 public void setInline(boolean isInline) {
88 myIsInline = isInline;
91 private boolean myIsInline = false;
95 public TemplateImpl(String key, String group) {
96 this(key, null, group);
97 toParseSegments = false;
98 myTemplateText = "";
99 mySegments = new ArrayList<Segment>();
102 public TemplateImpl(String key, String string, String group) {
103 myKey = key;
104 myString = string;
105 myGroupName = group;
109 public void addTextSegment(String text) {
110 text = StringUtil.convertLineSeparators(text, "\n");
111 myTemplateText += text;
114 public void addVariableSegment (String name) {
115 mySegments.add(new Segment(name, myTemplateText.length()));
118 public void addVariable(String name, Expression expression, Expression defaultValueExpression, boolean isAlwaysStopAt) {
119 if (mySegments != null) {
120 Segment segment = new Segment(name, myTemplateText.length());
121 mySegments.add(segment);
123 Variable variable = new Variable(name, expression, defaultValueExpression, isAlwaysStopAt);
124 myVariables.add(variable);
127 public void addEndVariable() {
128 Segment segment = new Segment(END, myTemplateText.length());
129 mySegments.add(segment);
132 public void addSelectionStartVariable() {
133 Segment segment = new Segment(SELECTION_START, myTemplateText.length());
134 mySegments.add(segment);
137 public void addSelectionEndVariable() {
138 Segment segment = new Segment(SELECTION_END, myTemplateText.length());
139 mySegments.add(segment);
142 public String getId() {
143 return myId;
146 public TemplateImpl copy() {
147 TemplateImpl template = new TemplateImpl(myKey, myString, myGroupName);
148 template.myId = myId;
149 template.myDescription = myDescription;
150 template.myShortcutChar = myShortcutChar;
151 template.isToReformat = isToReformat;
152 template.isToShortenLongNames = isToShortenLongNames;
153 template.myIsInline = myIsInline;
154 template.myTemplateContext = (TemplateContext)myTemplateContext.clone();
155 template.isDeactivated = isDeactivated;
156 for (Variable variable : myVariables) {
157 template.addVariable(variable.getName(), variable.getExpressionString(), variable.getDefaultValueString(), variable.isAlwaysStopAt());
159 return template;
162 public boolean isToReformat() {
163 return isToReformat;
166 public void setToReformat(boolean toReformat) {
167 isToReformat = toReformat;
170 public void setToIndent(boolean toIndent) {
171 isToIndent = toIndent;
174 public boolean isToIndent() {
175 return isToIndent;
178 public boolean isToShortenLongNames() {
179 return isToShortenLongNames;
182 public void setToShortenLongNames(boolean toShortenLongNames) {
183 isToShortenLongNames = toShortenLongNames;
186 public void setDeactivated(boolean isDeactivated) {
187 this.isDeactivated = isDeactivated;
190 public boolean isDeactivated() {
191 return isDeactivated;
194 public TemplateContext getTemplateContext() {
195 return myTemplateContext;
198 public int getEndSegmentNumber() {
199 return getVariableSegmentNumber(END);
202 public int getSelectionStartSegmentNumber() {
203 return getVariableSegmentNumber(SELECTION_START);
206 public int getSelectionEndSegmentNumber() {
207 return getVariableSegmentNumber(SELECTION_END);
210 public int getVariableSegmentNumber(String variableName) {
211 parseSegments();
212 for (int i = 0; i < mySegments.size(); i++) {
213 Segment segment = mySegments.get(i);
214 if (segment.name.equals(variableName)) {
215 return i;
218 return -1;
221 public String getTemplateText() {
222 parseSegments();
223 return myTemplateText;
226 public String getSegmentName(int i) {
227 parseSegments();
228 return mySegments.get(i).name;
231 public int getSegmentOffset(int i) {
232 parseSegments();
233 return mySegments.get(i).offset;
236 public int getSegmentsCount() {
237 parseSegments();
238 return mySegments.size();
241 public void parseSegments() {
242 if(!toParseSegments) {
243 return;
245 if(mySegments != null) {
246 return;
249 if (myString == null) myString = "";
250 myString = StringUtil.convertLineSeparators(myString, "\n");
251 mySegments = new ArrayList<Segment>();
252 StringBuffer buffer = new StringBuffer("");
253 TemplateTextLexer lexer = new TemplateTextLexer();
254 lexer.start(myString,0,myString.length(),0);
256 while(true){
257 IElementType tokenType = lexer.getTokenType();
258 if (tokenType == null) break;
259 int start = lexer.getTokenStart();
260 int end = lexer.getTokenEnd();
261 String token = myString.substring(start, end);
262 if (tokenType == TemplateTokenType.VARIABLE){
263 String name = token.substring(1, token.length() - 1);
264 Segment segment = new Segment(name, buffer.length());
265 mySegments.add(segment);
267 else if (tokenType == TemplateTokenType.ESCAPE_DOLLAR){
268 buffer.append("$");
270 else{
271 buffer.append(token);
273 lexer.advance();
275 myTemplateText = buffer.toString();
278 public void removeAllParsed() {
279 myVariables.clear();
280 mySegments = null;
283 public void addVariable(String name, String expression, String defaultValue, boolean isAlwaysStopAt) {
284 Variable variable = new Variable(name, expression, defaultValue, isAlwaysStopAt);
285 myVariables.add(variable);
288 public int getVariableCount() {
289 return myVariables.size();
292 public String getVariableNameAt(int i) {
293 return myVariables.get(i).getName();
296 public String getExpressionStringAt(int i) {
297 return myVariables.get(i).getExpressionString();
300 public Expression getExpressionAt(int i) {
301 return myVariables.get(i).getExpression();
304 public String getDefaultValueStringAt(int i) {
305 return myVariables.get(i).getDefaultValueString();
308 public Expression getDefaultValueAt(int i) {
309 return myVariables.get(i).getDefaultValueExpression();
312 public boolean isAlwaysStopAt(int i) {
313 return myVariables.get(i).isAlwaysStopAt();
316 public String getKey() {
317 return myKey;
320 public void setKey(String key) {
321 myKey = key;
324 public String getString() {
325 parseSegments();
326 return myString;
329 public void setString(String string) {
330 myString = string;
333 public String getDescription() {
334 return myDescription;
337 public void setDescription(String description) {
338 myDescription = description;
341 public char getShortcutChar() {
342 return myShortcutChar;
345 public void setShortcutChar(char shortcutChar) {
346 myShortcutChar = shortcutChar;
349 public String getGroupName() {
350 return myGroupName;
353 public void setGroupName(String groupName) {
354 myGroupName = groupName;
357 public boolean isSelectionTemplate() {
358 for (Variable v : myVariables) {
359 if (v.getName().equals(SELECTION)) return true;
362 return false;
365 public void setId(final String id) {
366 myId = id;
369 private static class Segment {
370 public String name;
371 public int offset;
373 public Segment(String name, int offset) {
374 this.name = name;
375 this.offset = offset;