idea 插件开发

2020-12-02 21:31:31 +08:00
 Aresxue

idea 插件开发的文档太贫瘠了,这里想解析 BeanUtils.copyproperties 这样的属性 copy 的字段的引用,大致就是点击字段然后展示 copy 或者被 copy 的地方,现在遇到瓶颈了,就是我拿到这个字段所在的类 PsiClass 和 BeanUtils.copyproperties 这个方法的 PsiReference 后不知道怎么把这两个结合在一起,有懂的朋友请帮助

2295 次点击
所在节点    Java
4 条回复
retanoj
2020-12-02 22:42:41 +08:00
我觉得我能解决,因为我写了个
https://plugins.jetbrains.com/plugin/15120-momo-code-sec-inspector-java-

但是我实在没看懂楼主的描述需求
Aresxue
2020-12-03 10:18:28 +08:00
@retanoj 那就纯粹需求描述,现在代码里有很多 BeanUtils.copyproperties (或其他的)属性 copy 操作,但对于这种 copy 点击 idea 中的 field,是无法展示该字段的 usages 的,在查看代码时变量的修改就非常难以追踪,现在我想完成一个插件点击 field 就展示 BeanUtils.copyproperties 的地方,之前的实现思路是按照 java 反射那套思路来的(获取 field 所在 Class,找到该 class 的对象, 当这个对象被 BeanUtils.copyproperties 时,假设是 source,就获取 target 的 class,在那个 class 中按照 field 的 name 和 type 寻找,找到了就说明匹配上了,这个 BeanUtils.copyproperties 就被展现出来)
retanoj
2020-12-04 14:16:27 +08:00
@Aresxue
听起来可行,但应该需要多次应用 Usages of 查询
1. 从 field 找到当前 PsiClass
2. 从当前 PsiClass 调用 Usages of 找到使用点(应该是找 New Instance creation 吧)
3. 从 New Instance 在 PsiNewXXXX 上拿到变量名称(或者 Reference ?)
4. 从这个 Reference 调用 Usages of 找到 BeanUtils.copyProperties()使用点
5. 如果为 source,则拿到 dest 的变量 PsiReference
6. 从 dest 的 PsiReference 能找到变量定义点,接下来就再看怎么用了

Usages of 这个功能应该与 FindUsagesManager 和 FindUsagesHandler 有关,具体用法还得再看下
retanoj
2020-12-04 14:40:15 +08:00
@Aresxue
Usages of 的用法,我简单试了一下,仅供参考
```
PsiLocalVariable localVariable; // 假如要从一个 localVariable 开始找

FindUsagesHandler handler =
JavaFindUsagesHandlerFactory.getInstance(project).createFindUsagesHandler(localVariable, false);

Collection<PsiReference> referenceCollection =
handler.findReferencesToHighlight(localVariable, localVariable.getUseScope());
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/731538

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX