diff --git a/UsageView/src/com/intellij/usages/impl/UsageFilteringRuleProviderImpl.java b/UsageView/src/com/intellij/usages/impl/UsageFilteringRuleProviderImpl.java index 24d2a6fd2768..cb6604fc5406 100644 --- a/UsageView/src/com/intellij/usages/impl/UsageFilteringRuleProviderImpl.java +++ b/UsageView/src/com/intellij/usages/impl/UsageFilteringRuleProviderImpl.java @@ -4,15 +4,14 @@ import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CustomShortcutSet; import com.intellij.openapi.actionSystem.ToggleAction; -import com.intellij.openapi.components.ApplicationComponent; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.*; +import com.intellij.usages.UsageView; import com.intellij.usages.impl.rules.ImportFilteringRule; import com.intellij.usages.impl.rules.ReadAccessFilteringRule; import com.intellij.usages.impl.rules.WriteAccessFilteringRule; import com.intellij.usages.rules.UsageFilteringRule; import com.intellij.usages.rules.UsageFilteringRuleProvider; -import com.intellij.usages.UsageView; import org.jdom.Element; import javax.swing.*; @@ -27,7 +26,7 @@ import java.util.List; * Time: 8:20:57 PM * To change this template use File | Settings | File Templates. */ -public class UsageFilteringRuleProviderImpl extends UsageFilteringRuleProvider implements ApplicationComponent, JDOMExternalizable { +public class UsageFilteringRuleProviderImpl implements UsageFilteringRuleProvider, JDOMExternalizable { public boolean SHOW_IMPORTS = true; public boolean SHOW_READ_ACCESS = true; public boolean SHOW_WRITE_ACCESS = true; diff --git a/UsageView/src/com/intellij/usages/impl/UsageGroupingRuleProviderImpl.java b/UsageView/src/com/intellij/usages/impl/UsageGroupingRuleProviderImpl.java index 7db48e721ac4..7563fcc70531 100644 --- a/UsageView/src/com/intellij/usages/impl/UsageGroupingRuleProviderImpl.java +++ b/UsageView/src/com/intellij/usages/impl/UsageGroupingRuleProviderImpl.java @@ -1,13 +1,12 @@ package com.intellij.usages.impl; import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.components.ApplicationComponent; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.*; +import com.intellij.usages.UsageView; import com.intellij.usages.impl.rules.*; import com.intellij.usages.rules.UsageGroupingRule; import com.intellij.usages.rules.UsageGroupingRuleProvider; -import com.intellij.usages.UsageView; import org.jdom.Element; import java.util.ArrayList; @@ -20,7 +19,7 @@ import java.util.List; * Time: 8:20:57 PM * To change this template use File | Settings | File Templates. */ -public class UsageGroupingRuleProviderImpl extends UsageGroupingRuleProvider implements ApplicationComponent, JDOMExternalizable { +public class UsageGroupingRuleProviderImpl implements UsageGroupingRuleProvider, JDOMExternalizable { public boolean GROUP_BY_USAGE_TYPE = true; public boolean GROUP_BY_MODULE = true; public boolean GROUP_BY_PACKAGE = true; diff --git a/UsageView/src/com/intellij/usages/impl/UsageViewImpl.java b/UsageView/src/com/intellij/usages/impl/UsageViewImpl.java index d3786287f8f1..82c7726c3f5a 100644 --- a/UsageView/src/com/intellij/usages/impl/UsageViewImpl.java +++ b/UsageView/src/com/intellij/usages/impl/UsageViewImpl.java @@ -64,8 +64,6 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra private ButtonPanel myButtonPanel = new ButtonPanel(); private boolean myChangesDetected = false; private List myUsagesToFlush = new ArrayList(); - private UsageGroupingRuleProvider myUsageGroupingRuleProvider = new CompositeUsageGroupingRuleProvider(); - private UsageFilteringRuleProvider myUsageFilteringRuleProvider = new CompositeUsageFilteringRuleProvider(); public UsageViewImpl(UsageViewPresentation presentation, UsageTarget[] targets, @@ -79,7 +77,7 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra myRootPanel = new MyPanel(myTree); UsageViewTreeModelBuilder model = new UsageViewTreeModelBuilder(myPresentation, targets); - myBuilder = new UsageNodeTreeBuilder(myUsageGroupingRuleProvider.getActiveRules(project), myUsageFilteringRuleProvider.getActiveRules(project), (GroupNode)model.getRoot()); + myBuilder = new UsageNodeTreeBuilder(getActiveGroupingRules(project), getActiveFilteringRules(project), (GroupNode)model.getRoot()); myTree.setModel(model); myRootPanel.setLayout(new BorderLayout()); @@ -113,6 +111,24 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra } } + private UsageFilteringRule[] getActiveFilteringRules(final Project project) { + final UsageFilteringRuleProvider[] providers = ApplicationManager.getApplication().getComponents(UsageFilteringRuleProvider.class); + List list = new ArrayList(); + for (int i = 0; i < providers.length; i++) { + list.addAll(Arrays.asList(providers[i].getActiveRules(project))); + } + return list.toArray(new UsageFilteringRule[list.size()]); + } + + private UsageGroupingRule[] getActiveGroupingRules(final Project project) { + final UsageGroupingRuleProvider[] providers = ApplicationManager.getApplication().getComponents(UsageGroupingRuleProvider.class); + List list = new ArrayList(); + for (int i = 0; i < providers.length; i++) { + list.addAll(Arrays.asList(providers[i].getActiveRules(project))); + } + return list.toArray(new UsageGroupingRule[list.size()]); + } + public void modelChanged(boolean isPropertyChange) { if (!isPropertyChange) { myChangesDetected = true; @@ -228,11 +244,21 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra } private AnAction[] createGroupingActions() { - return myUsageGroupingRuleProvider.createGroupingActions(this); + final UsageGroupingRuleProvider[] providers = ApplicationManager.getApplication().getComponents(UsageGroupingRuleProvider.class); + List list = new ArrayList(); + for (int i = 0; i < providers.length; i++) { + list.addAll(Arrays.asList(providers[i].createGroupingActions(this))); + } + return list.toArray(new AnAction[list.size()]); } private AnAction[] createFilteringActions() { - return myUsageFilteringRuleProvider.createFilteringActions(this); + final UsageFilteringRuleProvider[] providers = ApplicationManager.getApplication().getComponents(UsageFilteringRuleProvider.class); + List list = new ArrayList(); + for (int i = 0; i < providers.length; i++) { + list.addAll(Arrays.asList(providers[i].createFilteringActions(this))); + } + return list.toArray(new AnAction[list.size()]); } public void rulesChanged() { @@ -240,8 +266,8 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra captureUsagesExpandState(new TreePath(myTree.getModel().getRoot()), states); Collection allUsages = myUsageNodes.keySet(); reset(); - myBuilder.setGroupingRules(myUsageGroupingRuleProvider.getActiveRules(myProject)); - myBuilder.setFilteringRules(myUsageFilteringRuleProvider.getActiveRules(myProject)); + myBuilder.setGroupingRules(getActiveGroupingRules(myProject)); + myBuilder.setFilteringRules(getActiveFilteringRules(myProject)); for (Iterator i = allUsages.iterator(); i.hasNext();) { Usage usage = i.next(); if (!usage.isValid()) { diff --git a/UsageView/src/com/intellij/usages/rules/UsageFilteringRuleProvider.java b/UsageView/src/com/intellij/usages/rules/UsageFilteringRuleProvider.java index 2c20b8d42025..9a1310e5b6df 100644 --- a/UsageView/src/com/intellij/usages/rules/UsageFilteringRuleProvider.java +++ b/UsageView/src/com/intellij/usages/rules/UsageFilteringRuleProvider.java @@ -2,10 +2,11 @@ package com.intellij.usages.rules; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.project.Project; +import com.intellij.openapi.components.ApplicationComponent; import com.intellij.usages.UsageView; -public abstract class UsageFilteringRuleProvider { - public abstract UsageFilteringRule[] getActiveRules(Project project); +public interface UsageFilteringRuleProvider extends ApplicationComponent{ + UsageFilteringRule[] getActiveRules(Project project); - public abstract AnAction[] createFilteringActions(UsageView view); + AnAction[] createFilteringActions(UsageView view); } diff --git a/UsageView/src/com/intellij/usages/rules/UsageGroupingRuleProvider.java b/UsageView/src/com/intellij/usages/rules/UsageGroupingRuleProvider.java index 9e9910cdc371..952df1caf516 100644 --- a/UsageView/src/com/intellij/usages/rules/UsageGroupingRuleProvider.java +++ b/UsageView/src/com/intellij/usages/rules/UsageGroupingRuleProvider.java @@ -2,6 +2,7 @@ package com.intellij.usages.rules; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.project.Project; +import com.intellij.openapi.components.ApplicationComponent; import com.intellij.usages.UsageView; /** @@ -11,8 +12,8 @@ import com.intellij.usages.UsageView; * Time: 8:19:16 PM * To change this template use File | Settings | File Templates. */ -public abstract class UsageGroupingRuleProvider { - public abstract UsageGroupingRule[] getActiveRules(Project project); +public interface UsageGroupingRuleProvider extends ApplicationComponent{ + UsageGroupingRule[] getActiveRules(Project project); - public abstract AnAction[] createGroupingActions(UsageView view); + AnAction[] createGroupingActions(UsageView view); }