Skip to content

Commit 4948e2f

Browse files
committed
migrate to ui data provider
1 parent be0b6f4 commit 4948e2f

3 files changed

Lines changed: 122 additions & 112 deletions

File tree

plugin/src/main/java/com/intellij/spring/impl/ide/usages/SpringBeansGroupingRule.java

Lines changed: 116 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import com.intellij.spring.impl.ide.model.SpringUtils;
66
import com.intellij.spring.impl.ide.model.xml.DomSpringBean;
77
import consulo.dataContext.DataSink;
8-
import consulo.dataContext.TypeSafeDataProvider;
8+
import consulo.dataContext.UiDataProvider;
99
import consulo.language.editor.LangDataKeys;
1010
import consulo.language.psi.PsiElement;
1111
import consulo.language.psi.PsiFile;
@@ -22,134 +22,146 @@
2222
import consulo.util.dataholder.Key;
2323
import consulo.virtualFileSystem.status.FileStatus;
2424
import consulo.virtualFileSystem.status.FileStatusManager;
25-
import consulo.xml.language.psi.XmlElement;
26-
import consulo.xml.language.psi.XmlFile;
2725
import consulo.xml.dom.DomElement;
2826
import consulo.xml.dom.DomUtil;
29-
27+
import consulo.xml.language.psi.XmlElement;
28+
import consulo.xml.language.psi.XmlFile;
3029
import jakarta.annotation.Nonnull;
3130
import jakarta.annotation.Nullable;
3231

3332
public class SpringBeansGroupingRule implements UsageGroupingRule {
34-
private static final Logger LOG = Logger.getInstance(SpringBeansGroupingRule.class);
35-
36-
public UsageGroup groupUsage(Usage usage) {
37-
if (usage instanceof PsiElementUsage) {
38-
PsiElement psiElement = ((PsiElementUsage)usage).getElement();
39-
40-
final PsiFile psiFile = psiElement.getContainingFile();
41-
final Project project = psiElement.getProject();
42-
if (psiFile instanceof XmlFile && SpringManager.getInstance(project).isSpringBeans((XmlFile)psiFile)) {
43-
final DomElement domElement = DomUtil.getDomElement(psiElement);
44-
if (domElement != null) {
45-
final DomSpringBean springBean = domElement.getParentOfType(DomSpringBean.class, false);
46-
if (springBean != null) {
47-
return new SpringBeansUsageGroup(springBean);
48-
}
49-
}
50-
}
51-
}
52-
return null;
53-
}
54-
55-
private static class SpringBeansUsageGroup implements UsageGroup, TypeSafeDataProvider {
56-
private final String myName;
57-
private final DomSpringBean myBean;
58-
59-
public SpringBeansUsageGroup(@Nonnull DomSpringBean bean) {
60-
myBean = bean;
61-
final String beanName = bean.getPresentation().getElementName();
62-
myName = beanName == null ? SpringBundle.message("spring.bean.with.unknown.name") : beanName;
63-
64-
update();
65-
}
66-
67-
public void update() {
33+
private static final Logger LOG = Logger.getInstance(SpringBeansGroupingRule.class);
34+
35+
@Override
36+
public UsageGroup groupUsage(Usage usage) {
37+
if (usage instanceof PsiElementUsage) {
38+
PsiElement psiElement = ((PsiElementUsage) usage).getElement();
39+
40+
final PsiFile psiFile = psiElement.getContainingFile();
41+
final Project project = psiElement.getProject();
42+
if (psiFile instanceof XmlFile && SpringManager.getInstance(project).isSpringBeans((XmlFile) psiFile)) {
43+
final DomElement domElement = DomUtil.getDomElement(psiElement);
44+
if (domElement != null) {
45+
final DomSpringBean springBean = domElement.getParentOfType(DomSpringBean.class, false);
46+
if (springBean != null) {
47+
return new SpringBeansUsageGroup(springBean);
48+
}
49+
}
50+
}
51+
}
52+
return null;
6853
}
6954

70-
public boolean equals(final Object o) {
71-
if (this == o) return true;
72-
if (o == null || getClass() != o.getClass()) return false;
55+
private static class SpringBeansUsageGroup implements UsageGroup, UiDataProvider {
56+
private final String myName;
57+
private final DomSpringBean myBean;
7358

74-
final SpringBeansUsageGroup that = (SpringBeansUsageGroup)o;
59+
public SpringBeansUsageGroup(@Nonnull DomSpringBean bean) {
60+
myBean = bean;
61+
final String beanName = bean.getPresentation().getElementName();
62+
myName = beanName == null ? SpringBundle.message("spring.bean.with.unknown.name") : beanName;
7563

76-
if (!myBean.equals(that.myBean)) return false;
77-
if (!myName.equals(that.myName)) return false;
64+
update();
65+
}
7866

79-
return true;
80-
}
67+
@Override
68+
public void update() {
69+
}
8170

82-
public int hashCode() {
83-
int result;
84-
result = myName.hashCode();
85-
result = 31 * result + myBean.hashCode();
86-
return result;
87-
}
71+
@Override
72+
public boolean equals(final Object o) {
73+
if (this == o) {
74+
return true;
75+
}
76+
if (o == null || getClass() != o.getClass()) {
77+
return false;
78+
}
79+
80+
final SpringBeansUsageGroup that = (SpringBeansUsageGroup) o;
81+
82+
if (!myBean.equals(that.myBean)) {
83+
return false;
84+
}
85+
if (!myName.equals(that.myName)) {
86+
return false;
87+
}
88+
89+
return true;
90+
}
8891

89-
public Image getIcon() {
90-
return SpringIcons.SpringBean;
91-
}
92+
@Override
93+
public int hashCode() {
94+
int result;
95+
result = myName.hashCode();
96+
result = 31 * result + myBean.hashCode();
97+
return result;
98+
}
9299

93-
@Nonnull
94-
public String getText(UsageView view) {
95-
return myName;
96-
}
100+
@Override
101+
public Image getIcon() {
102+
return SpringIcons.SpringBean;
103+
}
97104

98-
@Nonnull
99-
public DomSpringBean getBean() {
100-
return myBean;
101-
}
105+
@Override
106+
@Nonnull
107+
public String getText(UsageView view) {
108+
return myName;
109+
}
102110

103-
public FileStatus getFileStatus() {
104-
return isValid() ? FileStatusManager.getInstance(myBean.getPsiManager().getProject())
105-
.getStatus(DomUtil.getFile(getBean()).getVirtualFile()) : null;
106-
}
111+
@Nonnull
112+
public DomSpringBean getBean() {
113+
return myBean;
114+
}
107115

108-
public boolean isValid() {
109-
return getBean().isValid();
110-
}
116+
@Override
117+
public FileStatus getFileStatus() {
118+
return isValid() ? FileStatusManager.getInstance(myBean.getPsiManager().getProject())
119+
.getStatus(DomUtil.getFile(getBean()).getVirtualFile()) : null;
120+
}
111121

112-
public void navigate(boolean focus) throws UnsupportedOperationException {
113-
if (canNavigate()) {
114-
SpringUtils.navigate(myBean);
115-
}
116-
}
122+
@Override
123+
public boolean isValid() {
124+
return getBean().isValid();
125+
}
117126

118-
public boolean canNavigate() {
119-
return isValid();
120-
}
127+
@Override
128+
public void navigate(boolean focus) throws UnsupportedOperationException {
129+
if (canNavigate()) {
130+
SpringUtils.navigate(myBean);
131+
}
132+
}
121133

122-
public boolean canNavigateToSource() {
123-
return canNavigate();
124-
}
134+
@Override
135+
public boolean canNavigate() {
136+
return isValid();
137+
}
125138

126-
public int compareTo(UsageGroup usageGroup) {
127-
if (!(usageGroup instanceof SpringBeansUsageGroup)) {
128-
LOG.error("MethodUsageGroup expected but " + usageGroup.getClass() + " found");
129-
}
139+
@Override
140+
public boolean canNavigateToSource() {
141+
return canNavigate();
142+
}
130143

131-
return myName.compareTo(((SpringBeansUsageGroup)usageGroup).myName);
132-
}
144+
@Override
145+
public int compareTo(UsageGroup usageGroup) {
146+
if (!(usageGroup instanceof SpringBeansUsageGroup)) {
147+
LOG.error("MethodUsageGroup expected but " + usageGroup.getClass() + " found");
148+
}
133149

134-
public void calcData(final Key<?> key, final DataSink sink) {
135-
if (!isValid()) return;
136-
if (LangDataKeys.PSI_ELEMENT == key) {
137-
final XmlElement element = getPsiElement();
138-
if (element != null && element.isValid()) {
139-
sink.put(LangDataKeys.PSI_ELEMENT, element);
150+
return myName.compareTo(((SpringBeansUsageGroup) usageGroup).myName);
140151
}
141-
}
142-
if (UsageView.USAGE_INFO_KEY == key) {
143-
PsiElement element = getPsiElement();
144-
if (element != null && element.isValid()) {
145-
sink.put(UsageView.USAGE_INFO_KEY, new UsageInfo(element));
152+
153+
@Override
154+
public void uiDataSnapshot(DataSink sink) {
155+
sink.lazy(LangDataKeys.PSI_ELEMENT, this::getPsiElement);
156+
sink.lazy(UsageView.USAGE_INFO_KEY, () -> {
157+
PsiElement element = getPsiElement();
158+
return element != null ? new UsageInfo(element) : null;
159+
});
146160
}
147-
}
148-
}
149161

150-
@Nullable
151-
private XmlElement getPsiElement() {
152-
return getBean().getXmlElement();
162+
@Nullable
163+
private XmlElement getPsiElement() {
164+
return getBean().getXmlElement();
165+
}
153166
}
154-
}
155167
}

plugin/src/main/java/consulo/spring/impl/toolWindow/SpringToolWindowFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public void createToolWindowContent(@Nonnull Project project, @Nonnull ToolWindo
4444

4545
contentManager.addContent(content);
4646

47-
contentManager.addDataProvider(panel);
47+
contentManager.addUiDataProvider(panel);
4848
}
4949

5050
@Override

plugin/src/main/java/consulo/spring/impl/toolWindow/SpringToolWindowPanel.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import consulo.annotation.component.ServiceImpl;
66
import consulo.component.messagebus.MessageBusConnection;
77
import consulo.dataContext.DataProvider;
8+
import consulo.dataContext.DataSink;
9+
import consulo.dataContext.UiDataProvider;
810
import consulo.disposer.Disposable;
911
import consulo.module.Module;
1012
import consulo.module.content.layer.event.ModuleRootEvent;
@@ -38,7 +40,7 @@
3840
@Singleton
3941
@ServiceAPI(ComponentScope.PROJECT)
4042
@ServiceImpl
41-
public class SpringToolWindowPanel implements Disposable, DataProvider {
43+
public class SpringToolWindowPanel implements Disposable, UiDataProvider {
4244
public static final Key<SpringToolWindowPanel> KEY = Key.of(SpringToolWindowPanel.class);
4345

4446
private final Tree myTree;
@@ -108,13 +110,9 @@ public JPanel getRootPanel() {
108110
return myRootPanel;
109111
}
110112

111-
@Nullable
112113
@Override
113-
public Object getData(@Nonnull Key<?> key) {
114-
if (KEY == key) {
115-
return this;
116-
}
117-
return null;
114+
public void uiDataSnapshot(DataSink sink) {
115+
sink.set(KEY, this);
118116
}
119117

120118
@Override

0 commit comments

Comments
 (0)