From 1e68c690afa79c8c11b43f3e5d229ff0ff592392 Mon Sep 17 00:00:00 2001 From: Sergey Evdokimov Date: Wed, 11 Apr 2012 16:26:12 +0400 Subject: [PATCH] Optimize MavenJDOMUtil --- .../maven/project/MavenProjectReader.java | 2 +- .../idea/maven/utils/MavenJDOMUtil.java | 44 ++++++++++++------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java index cc9fdd942cb0..70bd3d6942f6 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java @@ -145,7 +145,7 @@ public class MavenProjectReader { return new RawModelReadResult(result, problems, alwaysOnProfiles); } - private void readModelBody(MavenModelBase mavenModelBase, MavenBuildBase mavenBuildBase, Element xmlModel) { + private static void readModelBody(MavenModelBase mavenModelBase, MavenBuildBase mavenBuildBase, Element xmlModel) { mavenModelBase.setModules(MavenJDOMUtil.findChildrenValuesByPath(xmlModel, "modules", "module")); collectProperties(MavenJDOMUtil.findChildByPath(xmlModel, "properties"), mavenModelBase); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenJDOMUtil.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenJDOMUtil.java index 707fae5105a6..1b4721e121a0 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenJDOMUtil.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenJDOMUtil.java @@ -33,8 +33,6 @@ import java.util.Collections; import java.util.LinkedList; import java.util.List; -import static com.intellij.openapi.util.text.StringUtil.isEmptyOrSpaces; - public class MavenJDOMUtil { @Nullable public static Element read(final VirtualFile file, @Nullable final ErrorHandler handler) { @@ -95,7 +93,7 @@ public class MavenJDOMUtil { public void endTag(CharSequence localName, String namespace, int startoffset, int endoffset) { String name = localName.toString(); - if (isEmptyOrSpaces(name)) return; + if (StringUtil.isEmptyOrSpaces(name)) return; int index = -1; for (int i = stack.size() - 1; i >= 0; i--) { @@ -129,22 +127,27 @@ public class MavenJDOMUtil { return result[0]; } + @Nullable public static Element findChildByPath(@Nullable Element element, String path) { - if (element == null) return null; + int i = 0; + while (element != null) { + int dot = path.indexOf('.', i); + if (dot == -1) { + return element.getChild(path.substring(i)); + } - List parts = StringUtil.split(path, "."); - Element current = element; - for (String each : parts) { - current = current.getChild(each); - if (current == null) break; + element = element.getChild(path.substring(i, dot)); + i = dot + 1; } - return current; + + return null; } public static String findChildValueByPath(@Nullable Element element, String path, String defaultValue) { Element child = findChildByPath(element, path); - String childValue = child == null ? null : child.getTextTrim(); - return StringUtil.isEmptyOrSpaces(childValue) ? defaultValue : childValue; + if (child == null) return defaultValue; + String childValue = child.getTextTrim(); + return childValue.isEmpty() ? defaultValue : childValue; } public static String findChildValueByPath(@Nullable Element element, String path) { @@ -163,7 +166,7 @@ public class MavenJDOMUtil { List result = new ArrayList(); for (Element each : findChildrenByPath(element, path, childrenName)) { String value = each.getTextTrim(); - if (!StringUtil.isEmptyOrSpaces(value)) { + if (!value.isEmpty()) { result.add(value); } } @@ -173,13 +176,20 @@ public class MavenJDOMUtil { private static List collectChildren(@Nullable Element container, String subPath) { if (container == null) return Collections.emptyList(); - List subParts = StringUtil.split(subPath, "."); - String childName = subParts.get(0); - String pathInChild = subParts.size() > 1 ? StringUtil.join(subParts.subList(1, subParts.size()), ".") : null; + int firstDot = subPath.indexOf('.'); + + if (firstDot == -1) { + //noinspection unchecked + return (List)container.getChildren(subPath); + } + + String childName = subPath.substring(0, firstDot); + String pathInChild = subPath.substring(firstDot + 1); List result = new ArrayList(); + //noinspection unchecked for (Element each : (Iterable)container.getChildren(childName)) { - Element child = pathInChild == null ? each : findChildByPath(each, pathInChild); + Element child = findChildByPath(each, pathInChild); if (child != null) result.add(child); } return result;