diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomProjectProcessorUtils.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomProjectProcessorUtils.java index c0dff80e1804..402041792a47 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomProjectProcessorUtils.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomProjectProcessorUtils.java @@ -37,21 +37,26 @@ public class MavenDomProjectProcessorUtils { } @NotNull - public static List collectChildrenProjects(@NotNull final MavenDomProjectModel model) { + public static Set getChildrenProjects(@NotNull final MavenDomProjectModel model) { + Set models = new HashSet(); + collectChildrenProjects(model, models); + + return models; + } + + private static void collectChildrenProjects(@NotNull final MavenDomProjectModel model, @NotNull Set models) { MavenProject mavenProject = MavenDomUtil.findProject(model); if (mavenProject != null) { final Project project = model.getManager().getProject(); - Set inheritors = MavenProjectsManager.getInstance(project).findInheritors(mavenProject); - - - return ContainerUtil.mapNotNull(inheritors, new Function() { - public MavenDomProjectModel fun(MavenProject childProject) { - return MavenDomUtil.getMavenDomProjectModel(project, childProject.getFile()); + for (MavenProject inheritor : MavenProjectsManager.getInstance(project).findInheritors(mavenProject)) { + MavenDomProjectModel inheritorProjectModel = MavenDomUtil.getMavenDomProjectModel(project, inheritor.getFile()); + if (inheritorProjectModel != null && !models.contains(inheritorProjectModel)) { + models.add(inheritorProjectModel); + collectChildrenProjects(inheritorProjectModel, models); } - }); + } } - return Collections.emptyList(); } @NotNull public static Set collectParentProjects(@NotNull final MavenDomProjectModel projectDom, diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/annotator/MavenDomGutterAnnotator.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/annotator/MavenDomGutterAnnotator.java index 0ffde5494d59..2c9d5bb47319 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/annotator/MavenDomGutterAnnotator.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/annotator/MavenDomGutterAnnotator.java @@ -183,15 +183,8 @@ public class MavenDomGutterAnnotator implements Annotator { private static void annotateMavenDomProjectChildren(MavenDomProjectModel model, AnnotationHolder holder) { MavenProject mavenProject = MavenDomUtil.findProject(model); if (mavenProject != null) { - final Project project = model.getManager().getProject(); - Set inheritors = MavenProjectsManager.getInstance(project).findInheritors(mavenProject); + Set children = MavenDomProjectProcessorUtils.getChildrenProjects(model); - - List children = ContainerUtil.mapNotNull(inheritors, new Function() { - public MavenDomProjectModel fun(MavenProject childProject) { - return MavenDomUtil.getMavenDomProjectModel(project, childProject.getFile()); - } - }); if (children.size() > 0) { NavigationGutterIconBuilder.create(MavenIcons.CHILDREN_PROJECTS, MAVEN_PROJECT_CONVERTER). setTargets(children). diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/introduce/IntroducePropertyAction.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/introduce/IntroducePropertyAction.java index db21b39bc8cd..c4acd1de60ca 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/introduce/IntroducePropertyAction.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/introduce/IntroducePropertyAction.java @@ -205,16 +205,16 @@ public class IntroducePropertyAction extends BaseRefactoringAction { ApplicationManager.getApplication().runReadAction(new Runnable() { public void run() { collectUsages(myModel); - for (MavenDomProjectModel model : MavenDomProjectProcessorUtils.collectChildrenProjects(myModel)) { + for (MavenDomProjectModel model : MavenDomProjectProcessorUtils.getChildrenProjects(myModel)) { collectUsages(model); } } private void collectUsages(@NotNull MavenDomProjectModel model) { if (model.isValid()) { - XmlElement root = model.getXmlElement(); + final XmlElement root = model.getXmlElement(); if (root != null) { - root.accept(new XmlElementVisitor() { + root.acceptChildren(new XmlElementVisitor() { @Override public void visitXmlText(XmlText text) { @@ -226,7 +226,10 @@ public class IntroducePropertyAction extends BaseRefactoringAction { @Override public void visitXmlAttributeValue(XmlAttributeValue value) { - usages.addAll(getUsages(value)); + XmlTag xmlTag = PsiTreeUtil.getParentOfType(value, XmlTag.class); + if (xmlTag != null && !xmlTag.equals(root)) { + usages.addAll(getUsages(value)); + } } @Override diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/introduce/IntroducePropertyDialog.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/introduce/IntroducePropertyDialog.java index d4e25f376c30..2d99b166965c 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/introduce/IntroducePropertyDialog.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/refactorings/introduce/IntroducePropertyDialog.java @@ -26,7 +26,6 @@ import com.intellij.refactoring.introduceVariable.IntroduceVariableHandler; import com.intellij.refactoring.ui.NameSuggestionsField; import com.intellij.util.Function; import com.intellij.util.containers.OrderedSet; -import com.intellij.util.xml.DomBundle; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.dom.MavenDomBundle; import org.jetbrains.idea.maven.dom.MavenDomProjectProcessorUtils; @@ -212,7 +211,7 @@ public class IntroducePropertyDialog extends DialogWrapper { if (isPropertyExist(text, project)) return true; - for (MavenDomProjectModel child : MavenDomProjectProcessorUtils.collectChildrenProjects(project)) { + for (MavenDomProjectModel child : MavenDomProjectProcessorUtils.getChildrenProjects(project)) { if (isPropertyExist(text, child)) return true; }