From 6cc4e704473bbc559b30c8dd66052f580b72e794 Mon Sep 17 00:00:00 2001 From: Sergey Vasiliev Date: Mon, 9 Jul 2007 16:32:56 +0400 Subject: [PATCH] spring: file structure usages grouping for top level beans references(IDEADEV-18706) --- .../usages/impl/FileStructureGroupRuleProvider.java | 12 ++++++++++++ .../intellij/usages/impl/UsageGroupingRuleProviderImpl.java | 13 +++++++++++-- dom/openapi/src/com/intellij/util/xml/DomUtil.java | 10 +++++++++- 3 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 UsageView/src/com/intellij/usages/impl/FileStructureGroupRuleProvider.java diff --git a/UsageView/src/com/intellij/usages/impl/FileStructureGroupRuleProvider.java b/UsageView/src/com/intellij/usages/impl/FileStructureGroupRuleProvider.java new file mode 100644 index 0000000000..e7738869af --- /dev/null +++ b/UsageView/src/com/intellij/usages/impl/FileStructureGroupRuleProvider.java @@ -0,0 +1,12 @@ +package com.intellij.usages.impl; + +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.usages.rules.UsageGroupingRule; +import org.jetbrains.annotations.Nullable; + +public interface FileStructureGroupRuleProvider { + ExtensionPointName EP_NAME = new ExtensionPointName("com.intellij.fileStructureGroupRuleProvider"); + + @Nullable + UsageGroupingRule getUsageGroupingRule(); +} diff --git a/UsageView/src/com/intellij/usages/impl/UsageGroupingRuleProviderImpl.java b/UsageView/src/com/intellij/usages/impl/UsageGroupingRuleProviderImpl.java index 8c149de43e..b05eafcb3d 100644 --- a/UsageView/src/com/intellij/usages/impl/UsageGroupingRuleProviderImpl.java +++ b/UsageView/src/com/intellij/usages/impl/UsageGroupingRuleProviderImpl.java @@ -18,10 +18,11 @@ package com.intellij.usages.impl; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.CustomShortcutSet; +import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.*; -import com.intellij.usages.UsageView; import com.intellij.usageView.UsageViewBundle; +import com.intellij.usages.UsageView; import com.intellij.usages.impl.rules.*; import com.intellij.usages.rules.UsageGroupingRule; import com.intellij.usages.rules.UsageGroupingRuleProvider; @@ -30,8 +31,8 @@ import org.jdom.Element; import org.jetbrains.annotations.NotNull; import javax.swing.*; -import java.awt.event.KeyEvent; import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.List; @@ -61,6 +62,14 @@ public class UsageGroupingRuleProviderImpl implements UsageGroupingRuleProvider, rules.add(new ClassGroupingRule()); rules.add(new MethodGroupingRule()); rules.add(new NonJavaFileGroupingRule(project)); + + FileStructureGroupRuleProvider[] providers = Extensions.getExtensions(FileStructureGroupRuleProvider.EP_NAME); + for (FileStructureGroupRuleProvider ruleProvider : providers) { + final UsageGroupingRule rule = ruleProvider.getUsageGroupingRule(); + if(rule != null) { + rules.add(rule); + } + } } else { rules.add(new FileGroupingRule(project)); diff --git a/dom/openapi/src/com/intellij/util/xml/DomUtil.java b/dom/openapi/src/com/intellij/util/xml/DomUtil.java index e0375c5c6b..75fbac43f5 100644 --- a/dom/openapi/src/com/intellij/util/xml/DomUtil.java +++ b/dom/openapi/src/com/intellij/util/xml/DomUtil.java @@ -4,6 +4,7 @@ package com.intellij.util.xml; import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -224,11 +225,18 @@ public class DomUtil { int offset = editor.getCaretModel().getOffset(); PsiElement element = file.findElementAt(offset); + + return getDomElement(element); + } + + @Nullable + public static DomElement getDomElement(@Nullable final PsiElement element) { if (element == null) return null; + final Project project = element.getProject(); XmlTag tag = PsiTreeUtil.getParentOfType(element, XmlTag.class); while (tag != null) { - final DomElement domElement = DomManager.getDomManager(file.getProject()).getDomElement(tag); + final DomElement domElement = DomManager.getDomManager(project).getDomElement(tag); if(domElement != null) return domElement; tag = PsiTreeUtil.getParentOfType(tag, XmlTag.class, true); -- 2.11.4.GIT