From 8ed4e3b5102aadc877593f9c106e64d3be78fb73 Mon Sep 17 00:00:00 2001 From: Ed Merks Date: Tue, 15 Jul 2025 12:30:11 +0200 Subject: [PATCH 1/2] 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. https://github.com/eclipse-pde/eclipse.pde/issues/1873 --- .../extension/model/xml/XMLElement.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/model/xml/XMLElement.java b/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/model/xml/XMLElement.java index 9364d547b6e..1e4ad16e1ff 100644 --- a/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/model/xml/XMLElement.java +++ b/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/model/xml/XMLElement.java @@ -19,6 +19,13 @@ import java.util.regex.Pattern; public class XMLElement { + private static final Pattern START_ELEMENT_NAME_PATTERN = Pattern.compile("<\\s*(?\\w*).*", Pattern.DOTALL); //$NON-NLS-1$ + private static final Pattern END_ELEMENT_NAME_PATTERN = Pattern.compile("\\w*).*", Pattern.DOTALL); //$NON-NLS-1$ + private static final Pattern ATTRIBUTE_PATTERN = Pattern.compile("((?\\w*)\\s*=\\s*\"(?.*?)\")", //$NON-NLS-1$ + Pattern.DOTALL); + private static final Pattern START_ELEMENT_PATTERN = Pattern.compile("<[^/].*", Pattern.DOTALL); //$NON-NLS-1$ + private static final Pattern END_ELEMENT_PATTERN = Pattern.compile(".*", Pattern.DOTALL); //$NON-NLS-1$ + private final String element; private final int offset; private final String name; @@ -26,27 +33,23 @@ public class XMLElement { private final boolean isEndElement; private final boolean isStartElement; - private final Pattern startElementNamePattern = Pattern.compile("<\\s*(?\\w*).*", Pattern.DOTALL); //$NON-NLS-1$ - private final Pattern endElementNamePattern = Pattern.compile("\\w*).*", Pattern.DOTALL); //$NON-NLS-1$ - private final Pattern attributePattern = Pattern.compile("((?\\w*)\\s*=\\s*\"(?.*?)\")", Pattern.DOTALL);//$NON-NLS-1$ - public XMLElement(String element, int offset) { this.element = element; this.offset = offset; - this.isEndElement = element.matches("(.|\n)*"); //$NON-NLS-1$ - this.isStartElement = element.matches("<[^/](.|\n)*"); //$NON-NLS-1$ + this.isEndElement = END_ELEMENT_PATTERN.matcher(element).matches(); + this.isStartElement = START_ELEMENT_PATTERN.matcher(element).matches(); Pattern namePattern; if (isStartElement()) { - namePattern = startElementNamePattern; + namePattern = START_ELEMENT_NAME_PATTERN; } else { - namePattern = endElementNamePattern; + namePattern = END_ELEMENT_NAME_PATTERN; } Matcher nameMatcher = namePattern.matcher(element); nameMatcher.matches(); name = nameMatcher.group("name"); //$NON-NLS-1$ - Matcher attrMatcher = attributePattern.matcher(element); + Matcher attrMatcher = ATTRIBUTE_PATTERN.matcher(element); while (attrMatcher.find()) { String key = attrMatcher.group("key"); //$NON-NLS-1$ String value = attrMatcher.group("value"); //$NON-NLS-1$ From 5fce05616db995b35de44bed11f16f4d5514cbb5 Mon Sep 17 00:00:00 2001 From: Eclipse PDE Bot Date: Tue, 15 Jul 2025 10:38:55 +0000 Subject: [PATCH 2/2] Version bump(s) for 4.37 stream --- ui/org.eclipse.pde.genericeditor.extension/META-INF/MANIFEST.MF | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/org.eclipse.pde.genericeditor.extension/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.genericeditor.extension/META-INF/MANIFEST.MF index 26891db6002..cb86c60b2d7 100644 --- a/ui/org.eclipse.pde.genericeditor.extension/META-INF/MANIFEST.MF +++ b/ui/org.eclipse.pde.genericeditor.extension/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.pde.genericeditor.extension;singleton:=true -Bundle-Version: 1.3.100.qualifier +Bundle-Version: 1.3.200.qualifier Bundle-Localization: plugin Require-Bundle: org.eclipse.core.runtime, org.eclipse.jface.text,