-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
插件操作方式改进建议 #11
Comments
源码如下,可调试下,如果有好的处理方案可以提供; GenerateVo2DtoImpl @Override
protected GetObjConfigDO getObjConfigDOByClipboardText(GenerateContext generateContext) {
// 获取剪切板信息
String systemClipboardText = Utils.getSystemClipboardText().trim();
// 按照默认规则提取信息,例如:UserDto userDto
String[] split = systemClipboardText.split("\\s");
if (split.length < 2) {
return new GetObjConfigDO("", null, null, new HashMap<>());
}
// 摘取复制对象中的类和属性,同时支持复制 cn.xxx.class
String clazzName;
String clazzParam = split[1].trim();
String clazzNameImport = "";
String clazzNameStr = split[0].trim();
if (clazzNameStr.indexOf(".") > 0) {
clazzName = clazzNameStr.substring(clazzNameStr.lastIndexOf(".") + 1);
clazzNameImport = clazzNameStr;
} else {
clazzName = split[0].trim();
}
// 获取同名类集合
PsiClass[] psiClasses = PsiShortNamesCache.getInstance(generateContext.getProject()).getClassesByName(clazzName, GlobalSearchScope.allScope(generateContext.getProject()));
// 上下文检测,找到符合的复制类
PsiClass psiContextClass = null;
// 相同类名处理
if (psiClasses.length > 1) {
// 获取比对包文本
List<String> importList;
if (!"".equals(clazzNameImport)) {
importList = Collections.singletonList(clazzNameImport);
} else {
importList = getImportList(generateContext.getDocument().getText());
}
// 循环比对,通过引入的包名与类做包名做对比
for (PsiClass psiClass : psiClasses) {
String qualifiedName = Objects.requireNonNull(psiClass.getQualifiedName());
String packageName = qualifiedName.substring(0, qualifiedName.lastIndexOf("."));
if (importList.contains(packageName)) {
psiContextClass = psiClass;
break;
}
}
// 同包下比对
if (null == psiContextClass) {
String psiFilePackageName = ((PsiJavaFileImpl) generateContext.getPsiFile()).getPackageName();
for (PsiClass psiClass : psiClasses) {
String qualifiedName = Objects.requireNonNull(psiClass.getQualifiedName());
String packageName = qualifiedName.substring(0, qualifiedName.lastIndexOf("."));
if (psiFilePackageName.equals(packageName)) {
psiContextClass = psiClass;
break;
}
}
}
}
if (null == psiContextClass) {
psiContextClass = psiClasses[0];
}
List<PsiClass> psiClassLinkList = getPsiClassLinkList(psiContextClass);
Map<String, String> paramMtdMap = new HashMap<>();
Pattern getM = Pattern.compile(getRegex);
for (PsiClass psi : psiClassLinkList) {
List<String> methodsList = getMethods(psi, getRegex, "get");
for (String methodName : methodsList) {
String param = getM.matcher(methodName).replaceAll("$1").toLowerCase();
paramMtdMap.put(param, methodName);
}
}
return new GetObjConfigDO(psiContextClass.getQualifiedName(), clazzName, clazzParam, paramMtdMap); |
剪贴板确实没找到好的方案,但是向上搜索,目前有一个可以尝试的方案:
感谢辛苦的付出 |
很赞,对于这个也可以拉个分支提交个PR,验证试试,之后我验证通过我会发布新的版本。哈哈哈,可以一起共建。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
第一步,复制对象的时候,能不能只复制变量名,而不复制变量的类型,插件自动分析变量类型,因为这样鼠标双击就可以选中变量,方便操作。
第二步,锚点可不可以不放置到目标类型上,而是随便一个空行上,然后插件自动从当前锚点向上搜索最近定义的一个对象。
The text was updated successfully, but these errors were encountered: