Skip to content

Commit 3e2d557

Browse files
committed
Use static final Patterns in XMLElement
- In o.e.pde.internal.genericeditor.target.extension.model.xml.XMLElement there are a number (5) of string constants that are compiled for each XMLELement instance that is created that could all instead be compiled once and recorded as static final variables. - Also the patterns used to computer isStartElement and isEndElement don't properly handle line breaks, i.e., don't handle \r, and are better compiled using Pattern.DOT_ALL. eclipse-pde#1873
1 parent aa6f1da commit 3e2d557

1 file changed

Lines changed: 12 additions & 9 deletions

File tree

  • ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/model/xml

ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/model/xml/XMLElement.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,34 +19,37 @@
1919
import java.util.regex.Pattern;
2020

2121
public class XMLElement {
22+
private static final Pattern START_ELEMENT_NAME_PATTERN = Pattern.compile("<\\s*(?<name>\\w*).*", Pattern.DOTALL); //$NON-NLS-1$
23+
private static final Pattern END_ELEMENT_NAME_PATTERN = Pattern.compile("</\\s*(?<name>\\w*).*", Pattern.DOTALL); //$NON-NLS-1$
24+
private static final Pattern ATTRIBUTE_PATTERN = Pattern.compile("((?<key>\\w*)\\s*=\\s*\"(?<value>.*?)\")", //$NON-NLS-1$
25+
Pattern.DOTALL);
26+
private static final Pattern START_ELEMENT_PATTERN = Pattern.compile("<[^/].*", Pattern.DOTALL); //$NON-NLS-1$
27+
private static final Pattern END_ELEMENT_PATTERN = Pattern.compile("</.*|.*/>.*", Pattern.DOTALL); //$NON-NLS-1$
28+
2229
private final String element;
2330
private final int offset;
2431
private final String name;
2532
private final Map<String, String> attributes = new HashMap<>();
2633
private final boolean isEndElement;
2734
private final boolean isStartElement;
2835

29-
private final Pattern startElementNamePattern = Pattern.compile("<\\s*(?<name>\\w*).*", Pattern.DOTALL); //$NON-NLS-1$
30-
private final Pattern endElementNamePattern = Pattern.compile("</\\s*(?<name>\\w*).*", Pattern.DOTALL); //$NON-NLS-1$
31-
private final Pattern attributePattern = Pattern.compile("((?<key>\\w*)\\s*=\\s*\"(?<value>.*?)\")", Pattern.DOTALL);//$NON-NLS-1$
32-
3336
public XMLElement(String element, int offset) {
3437
this.element = element;
3538
this.offset = offset;
36-
this.isEndElement = element.matches("</(.|\n)*|(.|\n)*/>(.|\n)*"); //$NON-NLS-1$
37-
this.isStartElement = element.matches("<[^/](.|\n)*"); //$NON-NLS-1$
39+
this.isEndElement = END_ELEMENT_PATTERN.matcher(element).matches();
40+
this.isStartElement = START_ELEMENT_PATTERN.matcher(element).matches();
3841

3942
Pattern namePattern;
4043
if (isStartElement()) {
41-
namePattern = startElementNamePattern;
44+
namePattern = START_ELEMENT_NAME_PATTERN;
4245
} else {
43-
namePattern = endElementNamePattern;
46+
namePattern = END_ELEMENT_NAME_PATTERN;
4447
}
4548
Matcher nameMatcher = namePattern.matcher(element);
4649
nameMatcher.matches();
4750
name = nameMatcher.group("name"); //$NON-NLS-1$
4851

49-
Matcher attrMatcher = attributePattern.matcher(element);
52+
Matcher attrMatcher = ATTRIBUTE_PATTERN.matcher(element);
5053
while (attrMatcher.find()) {
5154
String key = attrMatcher.group("key"); //$NON-NLS-1$
5255
String value = attrMatcher.group("value"); //$NON-NLS-1$

0 commit comments

Comments
 (0)