Skip to content

Commit 273a98e

Browse files
committed
feat: add generate sql icon to line
1 parent eea6ab3 commit 273a98e

11 files changed

+305
-143
lines changed

src/main/java/io/github/linyimin/plugin/provider/MapperInterfaceLineMakerProvider.java renamed to src/main/java/io/github/linyimin/plugin/provider/MapperInterfaceProcessor.java

Lines changed: 8 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,32 @@
11
package io.github.linyimin.plugin.provider;
22

3-
import com.intellij.codeInsight.daemon.RelatedItemLineMarkerInfo;
4-
import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder;
5-
import com.intellij.openapi.editor.markup.GutterIconRenderer;
63
import com.intellij.psi.PsiClass;
74
import com.intellij.psi.PsiElement;
85
import com.intellij.psi.PsiMethod;
9-
import com.intellij.psi.PsiNameIdentifierOwner;
106
import com.intellij.psi.xml.XmlTag;
117
import com.intellij.util.xml.DomElement;
128
import io.github.linyimin.plugin.dom.model.IdDomElement;
139
import io.github.linyimin.plugin.dom.model.Mapper;
14-
import io.github.linyimin.plugin.utils.IconUtils;
15-
import io.github.linyimin.plugin.utils.JavaUtils;
1610
import io.github.linyimin.plugin.utils.MapperDomUtils;
17-
import org.apache.commons.collections.CollectionUtils;
1811
import org.apache.commons.lang3.StringUtils;
19-
import org.jetbrains.annotations.NotNull;
2012

21-
import java.util.*;
13+
import java.util.Collection;
14+
import java.util.Collections;
15+
import java.util.List;
16+
import java.util.Objects;
2217
import java.util.stream.Collectors;
2318

2419
/**
2520
* @author yiminlin
26-
* @date 2022/01/23 4:52 pm
27-
* @description mapper interface method jump to xml
21+
* @date 2022/01/31 10:01 上午
2822
**/
29-
public class MapperInterfaceLineMakerProvider extends MapperLineMakerProviderAbstract {
30-
31-
@Override
32-
protected void collectNavigationMarkers(@NotNull PsiElement element, @NotNull Collection<? super RelatedItemLineMarkerInfo<?>> result) {
33-
34-
// 只处理Mapper接口中的内容
35-
if (!JavaUtils.isElementWithinMapperInterface(element)) {
36-
return;
37-
}
38-
39-
List<PsiElement> target = acquireTarget(element);
40-
41-
42-
if (CollectionUtils.isEmpty(target)) {
43-
return;
44-
}
45-
46-
NavigationGutterIconBuilder<PsiElement> builder = NavigationGutterIconBuilder
47-
.create(IconUtils.JAVA_TO_XML_ICON)
48-
.setAlignment(GutterIconRenderer.Alignment.CENTER)
49-
.setTargets(target)
50-
.setTooltipTitle("Navigation to Target in Mapper Xml");
51-
52-
53-
PsiNameIdentifierOwner identifierOwner = (PsiNameIdentifierOwner) element;
54-
if (Objects.isNull(identifierOwner.getNameIdentifier())) {
55-
return;
56-
}
57-
58-
result.add(builder.createLineMarkerInfo(identifierOwner.getNameIdentifier()));
59-
60-
}
61-
23+
public class MapperInterfaceProcessor {
6224
/**
6325
* 针对mapper interface的处理,返回满足要求的XmlTag列表
6426
* @param psiElement {@link PsiElement}
6527
* @return 满足要求的XmlTag列表
6628
*/
67-
@Override
68-
public List<PsiElement> processMapperInterface(PsiElement psiElement) {
29+
public static List<XmlTag> processMapperInterface(PsiElement psiElement) {
6930
if (!(psiElement instanceof PsiClass)) {
7031
return Collections.emptyList();
7132
}
@@ -77,8 +38,6 @@ public List<PsiElement> processMapperInterface(PsiElement psiElement) {
7738
return mappers
7839
.stream()
7940
.map(DomElement::getXmlTag)
80-
.filter(Objects::nonNull)
81-
.map(XmlTag::getNavigationElement)
8241
.collect(Collectors.toList());
8342

8443
}
@@ -88,8 +47,7 @@ public List<PsiElement> processMapperInterface(PsiElement psiElement) {
8847
* @param element {@link PsiElement}
8948
* @return 满足要求的XmlTag列表
9049
*/
91-
@Override
92-
public List<PsiElement> processMapperMethod(PsiElement element) {
50+
public static List<XmlTag> processMapperMethod(PsiElement element) {
9351
if (!(element instanceof PsiMethod)) {
9452
return Collections.emptyList();
9553
}
@@ -118,8 +76,6 @@ public List<PsiElement> processMapperMethod(PsiElement element) {
11876
return StringUtils.equals(methodId, qualifiedName + "." + id);
11977
})
12078
.map(IdDomElement::getXmlTag)
121-
.filter(Objects::nonNull)
122-
.map(XmlTag::getNavigationElement)
12379
.collect(Collectors.toList());
12480
}
12581
}

src/main/java/io/github/linyimin/plugin/provider/MapperLineMakerProviderAbstract.java

Lines changed: 0 additions & 44 deletions
This file was deleted.

src/main/java/io/github/linyimin/plugin/provider/MapperXmlLineMakerProvider.java renamed to src/main/java/io/github/linyimin/plugin/provider/MapperXmlProcessor.java

Lines changed: 16 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package io.github.linyimin.plugin.provider;
22

33
import com.google.common.collect.Lists;
4-
import com.intellij.codeInsight.daemon.RelatedItemLineMarkerInfo;
5-
import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder;
6-
import com.intellij.openapi.editor.markup.GutterIconRenderer;
74
import com.intellij.psi.PsiClass;
85
import com.intellij.psi.PsiElement;
96
import com.intellij.psi.PsiMethod;
@@ -13,55 +10,26 @@
1310
import io.github.linyimin.plugin.dom.Constant;
1411
import io.github.linyimin.plugin.dom.model.IdDomElement;
1512
import io.github.linyimin.plugin.dom.model.Mapper;
16-
import io.github.linyimin.plugin.utils.IconUtils;
1713
import io.github.linyimin.plugin.utils.JavaUtils;
1814
import io.github.linyimin.plugin.utils.MapperDomUtils;
19-
import org.apache.commons.collections.CollectionUtils;
2015
import org.apache.commons.lang3.StringUtils;
21-
import org.jetbrains.annotations.NotNull;
22-
23-
import java.util.Collection;
2416
import java.util.Collections;
2517
import java.util.List;
2618
import java.util.Objects;
2719
import java.util.stream.Collectors;
2820

2921
/**
3022
* @author yiminlin
31-
* @date 2022/01/31 1:03 上午
32-
* @description mapper interface method jump to xml
23+
* @date 2022/01/31 10:03 上午
3324
**/
34-
public class MapperXmlLineMakerProvider extends MapperLineMakerProviderAbstract {
35-
36-
@Override
37-
protected void collectNavigationMarkers(@NotNull PsiElement element, @NotNull Collection<? super RelatedItemLineMarkerInfo<?>> result) {
38-
39-
if (!MapperDomUtils.isElementWithinMapperXml(element)) {
40-
return;
41-
}
42-
43-
44-
List<PsiElement> target = acquireTarget(element);
45-
46-
47-
if (CollectionUtils.isEmpty(target)) {
48-
return;
49-
}
50-
51-
NavigationGutterIconBuilder<PsiElement> builder = NavigationGutterIconBuilder
52-
.create(IconUtils.XML_TO_JAVA_ICON)
53-
.setAlignment(GutterIconRenderer.Alignment.CENTER)
54-
.setTargets(target)
55-
.setTooltipTitle("Navigation to Target in Mapper Class");
56-
57-
58-
XmlTag xmlTag = (XmlTag) element;
59-
60-
result.add(builder.createLineMarkerInfo(xmlTag));
61-
}
25+
public class MapperXmlProcessor {
6226

63-
@Override
64-
public List<PsiElement> processMapperInterface(PsiElement psiElement) {
27+
/**
28+
* 针对mapper interface的处理,返回满足要求的XmlTag列表
29+
* @param psiElement {@link PsiElement}
30+
* @return 满足要求的XmlTag列表
31+
*/
32+
public static List<PsiClass> processMapperInterface(PsiElement psiElement) {
6533

6634
XmlTag xmlTag = (XmlTag) psiElement;
6735

@@ -80,11 +48,15 @@ public List<PsiElement> processMapperInterface(PsiElement psiElement) {
8048
String namespace = mapper.getNamespace().getRawText();
8149
PsiClass psiClass = JavaUtils.findClazz(psiElement.getProject(), namespace);
8250

83-
return Objects.isNull(psiClass) ? Collections.emptyList() : Lists.newArrayList(psiClass.getNavigationElement());
51+
return Objects.isNull(psiClass) ? Collections.emptyList() : Lists.newArrayList(psiClass);
8452
}
8553

86-
@Override
87-
public List<PsiElement> processMapperMethod(PsiElement element) {
54+
/**
55+
* 针对mapper method的处理,返回满足要求的PsiMethod列表
56+
* @param element {@link PsiElement}
57+
* @return 满足要求的PsiMethod列表
58+
*/
59+
public static List<PsiMethod> processMapperMethod(PsiElement element) {
8860
XmlTag xmlTag = (XmlTag) element;
8961

9062
if (!Constant.MYBATIS_OPS.contains(xmlTag.getName())) {
@@ -103,8 +75,7 @@ public List<PsiElement> processMapperMethod(PsiElement element) {
10375
String qualifiedName = mapper.getNamespace().getRawText();
10476
String methodName = idDomElement.getId().getRawText();
10577

106-
List<PsiMethod> psiMethods = JavaUtils.findMethod(element.getProject(), qualifiedName, methodName);
78+
return JavaUtils.findMethod(element.getProject(), qualifiedName, methodName);
10779

108-
return psiMethods.stream().map(PsiElement::getNavigationElement).collect(Collectors.toList());
10980
}
11081
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package io.github.linyimin.plugin.provider.generate;
2+
3+
import com.intellij.psi.PsiElement;
4+
import com.intellij.psi.PsiMethod;
5+
import com.intellij.psi.xml.XmlTag;
6+
import com.intellij.util.Function;
7+
8+
9+
/**
10+
* @author yiminlin
11+
* @date 2022/01/31 10:36 上午
12+
**/
13+
public class FunctionTooltip implements Function<PsiElement, String> {
14+
15+
private String msg = "Generate Sql and params for ";
16+
PsiElement psiElement;
17+
18+
public FunctionTooltip() {}
19+
20+
public FunctionTooltip(PsiElement psiElement) {
21+
this.psiElement = psiElement;
22+
}
23+
24+
@Override
25+
public String fun(PsiElement psiElement) {
26+
if (psiElement instanceof PsiMethod) {
27+
PsiMethod psiMethod = (PsiMethod) psiElement;
28+
return msg + psiMethod.getName();
29+
}
30+
if (psiElement instanceof XmlTag) {
31+
XmlTag xmlTag = (XmlTag) psiElement;
32+
return msg + xmlTag.getName();
33+
}
34+
return null;
35+
}
36+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package io.github.linyimin.plugin.provider.generate;
2+
3+
import com.intellij.codeInsight.daemon.LineMarkerInfo;
4+
import com.intellij.codeInsight.daemon.LineMarkerProvider;
5+
import com.intellij.openapi.editor.markup.GutterIconRenderer;
6+
import com.intellij.psi.PsiElement;
7+
import com.intellij.psi.PsiNameIdentifierOwner;
8+
import io.github.linyimin.plugin.utils.IconUtils;
9+
import io.github.linyimin.plugin.utils.JavaUtils;
10+
import org.jetbrains.annotations.NotNull;
11+
12+
import java.util.Objects;
13+
14+
/**
15+
* @author yiminlin
16+
* @date 2022/01/31 9:32 上午
17+
**/
18+
public class MapperInterfaceGenerateSqlLineMakerProvider implements LineMarkerProvider {
19+
20+
@Override
21+
public LineMarkerInfo<?> getLineMarkerInfo(@NotNull PsiElement element) {
22+
23+
// 只处理Mapper接口中的内容
24+
if (!JavaUtils.isMapperMethod(element)) {
25+
return null;
26+
}
27+
28+
PsiNameIdentifierOwner identifierOwner = (PsiNameIdentifierOwner) element;
29+
30+
if (Objects.isNull(identifierOwner.getNameIdentifier())) {
31+
return null;
32+
}
33+
34+
FunctionTooltip tooltip = new FunctionTooltip(element);
35+
36+
return new LineMarkerInfo<>(
37+
identifierOwner.getNameIdentifier(),
38+
identifierOwner.getNameIdentifier().getTextRange(),
39+
IconUtils.GENERATE_ICON,
40+
tooltip,
41+
null,
42+
GutterIconRenderer.Alignment.CENTER,
43+
() -> "mybatis-sql-viewer");
44+
}
45+
46+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package io.github.linyimin.plugin.provider.generate;
2+
3+
import com.intellij.codeInsight.daemon.LineMarkerInfo;
4+
import com.intellij.codeInsight.daemon.LineMarkerProvider;
5+
import com.intellij.openapi.editor.markup.GutterIconRenderer;
6+
import com.intellij.psi.PsiElement;
7+
import com.intellij.psi.xml.XmlTag;
8+
import io.github.linyimin.plugin.dom.Constant;
9+
import io.github.linyimin.plugin.utils.IconUtils;
10+
import io.github.linyimin.plugin.utils.MapperDomUtils;
11+
import org.jetbrains.annotations.NotNull;
12+
13+
/**
14+
* @author yiminlin
15+
* @date 2022/01/31 11:06 上午
16+
**/
17+
public class MapperXmlGenerateSqlLineMakerProvider implements LineMarkerProvider {
18+
@Override
19+
public LineMarkerInfo<?> getLineMarkerInfo(@NotNull PsiElement element) {
20+
21+
// 只处理Mapper接口中的内容
22+
if (!MapperDomUtils.isElementWithinMapperXml(element)) {
23+
return null;
24+
}
25+
26+
XmlTag xmlTag = (XmlTag) element;
27+
28+
if (!Constant.MYBATIS_OPS.contains(xmlTag.getName())) {
29+
return null;
30+
}
31+
32+
FunctionTooltip tooltip = new FunctionTooltip(element);
33+
34+
return new LineMarkerInfo<>(
35+
xmlTag.getNavigationElement(),
36+
xmlTag.getNavigationElement().getTextRange(),
37+
IconUtils.GENERATE_ICON,
38+
tooltip,
39+
null,
40+
GutterIconRenderer.Alignment.CENTER,
41+
() -> "mybatis-sql-viewer");
42+
}
43+
}

0 commit comments

Comments
 (0)