Skip to content

Commit

Permalink
add JavaMetaBean
Browse files Browse the repository at this point in the history
  • Loading branch information
Rookie authored and Rookie committed Jan 22, 2022
1 parent e8ee716 commit e374730
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 14 deletions.
24 changes: 24 additions & 0 deletions src/main/java/org/rookie/plugins/bean/JavaMetaBean.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.rookie.plugins.bean;

public class JavaMetaBean {

private String type;

private String methodText;

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

public String getMethodText() {
return methodText;
}

public void setMethodText(String methodText) {
this.methodText = methodText;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTypesUtil;
import org.apache.commons.lang3.StringUtils;
import org.rookie.plugins.bean.JavaMetaBean;
import org.rookie.plugins.utils.ClipboardUtil;
import org.rookie.plugins.utils.IntellijNotifyUtil;
import org.rookie.plugins.utils.JavaClassUtil;
Expand All @@ -17,6 +18,7 @@
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public class BeanMappingJavaDelegate implements BeanMappingDelegate {

Expand Down Expand Up @@ -57,7 +59,7 @@ private void doPsiMethod(PsiMethod psiMethod) {
}

// process from field and getMethod
Map<String, String> fromFieldMap = toParamsFieldMap(psiMethod.getParameterList());
Map<String, JavaMetaBean> fromFieldMap = toParamsFieldMap(psiMethod.getParameterList());
PsiClass to = PsiTypesUtil.getPsiClass(psiMethod.getReturnType());

StringBuilder context = new StringBuilder();
Expand All @@ -66,30 +68,30 @@ private void doPsiMethod(PsiMethod psiMethod) {
// builder model
context.append(TabUtil.getDoubleTabSpace()).append("return ").append(to.getName()).append(".builder()\n");
Arrays.stream(to.getAllFields()).forEach(f -> {
String val = fromFieldMap.get(f.getName());
JavaMetaBean val = fromFieldMap.get(f.getName());
context.append(TabUtil.getDoubleTabSpace()).append(TabUtil.getDoubleTabSpace())
.append(".").append(f.getName()).append("(");
if (StringUtils.isNotEmpty(val)) {
context.append(val);
if (!Objects.isNull(val)) {
context.append(val.getMethodText());
}
context.append(")\n");
});
context.append(TabUtil.getDoubleTabSpace()).append(TabUtil.getDoubleTabSpace()).append(".build();");

context.append(TabUtil.getDoubleTabSpace()).append(TabUtil.getDoubleTabSpace()).append(".build();");
} else {
// set model
String localVar = String.valueOf(to.getName().charAt(0)).toLowerCase() + to.getName().substring(1);
context.append(TabUtil.getDoubleTabSpace())
.append(to.getName()).append(" ").append(localVar)
.append(" = new ").append(to.getName()).append("();\n");
Arrays.stream(to.getAllFields()).forEach(f -> {
String val = fromFieldMap.get(f.getName());
if (StringUtils.isNotEmpty(val)) {
JavaMetaBean val = fromFieldMap.get(f.getName());
if (!Objects.isNull(val)) {
context.append(TabUtil.getDoubleTabSpace())
.append(localVar).append(".").append("set")
.append(String.valueOf(f.getName().charAt(0)).toUpperCase())
.append(f.getName().substring(1))
.append("(").append(val).append(");\n");
.append("(").append(val.getMethodText()).append(");\n");
}
});
context.append(TabUtil.getDoubleTabSpace()).append("return ").append(localVar).append(";");
Expand All @@ -101,30 +103,40 @@ private void doPsiMethod(PsiMethod psiMethod) {
() -> document.insertString(psiMethod.getBody().getTextOffset() + 1, "\n" + context));
}

private HashMap<String, String> toParamsFieldMap(PsiParameterList list) {
HashMap<String, String> map = new HashMap<>();
private HashMap<String, JavaMetaBean> toParamsFieldMap(PsiParameterList list) {
HashMap<String, JavaMetaBean> map = new HashMap<>();
for (PsiParameter parameter : list.getParameters()) {
if (parameter != null) {
// 非基础数据参数
if (JavaClassUtil.isNotBasicType(parameter.getType().getPresentableText())) {
PsiClass from = PsiTypesUtil.getPsiClass(parameter.getType());
if (from != null) {
HashMap<String, String> temp = new HashMap<>();
// 先将实体类的参数作为key写入map
HashMap<String, JavaMetaBean> temp = new HashMap<>();
Arrays.stream(from.getAllFields())
.forEach(f -> temp.put(f.getName(), f.getName()));
.forEach(f -> temp.put(f.getName(), null));

// 填充map的val值
String fromVarName = parameter.getName();
Arrays.stream(from.getAllMethods()).forEach(m -> {
if (m.getName().startsWith("get")) {
temp.keySet().forEach(k -> {
if (m.getName().equalsIgnoreCase(("get" + k))) {
temp.put(k, fromVarName + "." + m.getName() + "()");
JavaMetaBean bean = new JavaMetaBean();
bean.setType(m.getReturnType().getPresentableText());
bean.setMethodText(fromVarName + "." + m.getName() + "()");
temp.put(k, bean);
}
});
}
});
map.putAll(temp);
}
} else {
map.put(parameter.getName(), parameter.getName());
JavaMetaBean bean = new JavaMetaBean();
bean.setType(parameter.getType().getPresentableText());
bean.setMethodText(parameter.getName());
map.put(parameter.getName(), bean);
}
}
}
Expand Down

0 comments on commit e374730

Please sign in to comment.