发布时间:2025-06-22
浏览次数:0
该网页上的图片链接指向的图片文件版本已进行升级。
开源项目中最让人头疼的是如何得知新版本的发布,以及新版本中解决了哪些问题。就像这张图所示,若能设置一个提醒机制,每次新版本发布时都能通知我,告知新版本新增了哪些功能、修复了哪些问题,并与我当前使用的版本进行对比,明确是否需要修改代码才能直接升级,那无疑会大大简化操作流程。
提供便捷的在线服务,实现图片文件从原地址至目标位置的快速转移,名为“http://.cn//img/image/.png一键迁移工具”。
官网内置了图形界面的迁移助手,可便捷地将数据从其他路由器迁移过来。然而,在使用过程中,还需额外下载一款应用程序。鉴于代码已开源,若将此功能直接集成到开发工具中,无疑将大大提升便利性。
导航跳转是通过什么方式完成的?
在 idea 插件的开发过程中,存在一个至关重要的类别,该类别由提供的 SDK 所提供。该类别充当代码每一行的标识提供者,与图中代码侧面的标识相对应,其创建方式如下。
例如,在这款设计插件中,通过以下代码实现了一个侧边栏的行标记功能:
if若(allMarkerStatus[key]不等于STATUS_SHOWN),{
所有标记的状态中,以key为键的值被设置为显示状态。
构建器将边距图标渲染器的对齐方式设定为居中。
builder.setTargets(all)
if若目标内容的类型等于注释类型或动作类型,则执行。
构建器设定了工具提示的标题为:"TheRouter:跳转到使用处")
} else {
builder.setTooltipTitle("TheRouter:跳转到声明处")
}
result中添加了builder依据psiElement创建的行标记信息。
}
在这个功能中,我们使用点括号来定义一个侧边栏的行标记,该标记接受一个图片资源作为输入。根据需要展示的内容类型,我选择了相应的资源图片进行返回。
fun getIcon(type: Int): Icon {
return when (type) {
TYPE_ANNOTATION映射至IconLoader的getIcon方法,以获取图标。"/icon/icon_from.png")
TYPE_NAVIGATION操作将触发IconLoader类中的getIcon方法执行。"/icon/icon_to.png")
TYPE_ACTION映射至IconLoader的getIcon方法。"/icon/icon_from.png")
else -> IconLoader.getIcon("/icon/icon_warn.png")
}
}
找到要跳转的psi
解决了显示的标记,剩下的就是找到点击标记后要跳到哪里了。
在 idea 插件的 SDK 中,存在一个至关重要的类别,即 PSI(程序结构接口),其核心职能是解析文件内容、构建语法和语义代码。每个 PSI 实例都代表了一条我们需处理的代码语句。
在上述代码中,存在一个关键的方法.(),它指示点击相应图标后应跳转至何处。该代码段中的参数all代表一个集合,若集合中仅有一个元素,点击后便会直接进行跳转;若集合包含多个元素,则会弹出一个选择界面,供插件使用者自行挑选目标进行跳转。
此all集合的获取途径源自另一个SDK所提供的方法。()。()该方法能够将项目内所有代码以psi形式呈现,便于你根据具体需求进行筛选,锁定跳转目标位置。具体操作方法,请参考以下代码片段:
private fun findAllTargetPsi(
project: Project,
filePath: String?,
target: TargetContent
): Collection {
val allTargetPsi 为一个集合,该集合中包含了所有目标心理状态的数据。()
获取项目范围,使用全局搜索范围函数,对项目进行项目范围的界定。
val allCodeFiles = FilenameIndex通过项目信息获取所有扩展名为代码的文件列表,,,然后返回这些文件的集合。"kt", scopes)
所有代码文件集合中加入了Java文件。
for (virtualFile in allCodeFiles) {
psiFile变量:等于PsiManager实例化对象在指定项目中查找virtualFile所对应的PsiFile。
psiFile ?: return HashSet()
获取psiFile中的子元素,通过PsiTreeUtil工具类调用findChildrenOfType方法,参数为PsiElement类。
遍历properties集合中的每个元素,对psiElement进行操作。
allTargetPsi集合中新增了元素,该元素为TargetPsiElement,其中包含psiElement和psiFile的名称。
}
}
return allTargetPsi
}
迁移工具是如何实现的
存在一个显而易见的缘由,即在规划阶段广泛借鉴了众多其他路由器的设计方案,依据官方的介绍:
之所以命名为如此,是因为“The”象征着独特性;在设计阶段,我们全面审视了所有现行的开源方案intellij idea activiti,广泛借鉴了其中的卓越成果,并且针对各方案的不足之处进行了补充和完善。
因此,在API层面,其与其他路由并无显著差异,故而迁移工具的核心功能在于“字符串替换”。关于替换的具体内容,此处不予赘述,下面重点来讲解如何在插件中实现UI弹窗的展示。
首先intellij idea activiti,我们需要构建一个类,这个类同样来源于所提供的SDK。它的功能是在菜单栏中展示一个菜单项,具体表现形式如下:,
SDK同样已经准备好了弹窗的接口,开发者只需直接调用,便能够轻松实现弹窗功能。
class TransferAction : AnAction() {
私有变量routerNameList被定义为HashMap类型()
覆盖函数fun,在事件触发时执行,事件类型为AnActionEvent。
return
获取版本号后,变量val被赋值为该版本号。
if (MessageDialogBuilder
.okCancel(
"TheRouter 一键迁移工具",
"当前项目为:$projectPath\n\n即将迁移至 TheRouter $latestVersion。迁移完成后,会在桌面生成改动日志。请注意查看:\n\n${file.absolutePath}。"
)
.noText("取消")
.yesText("开始迁移")
图标设置为获取信息图标。
.ask(project)
) {
routerNameList["ARouter"执行项目路径的转移操作,指定最新版本,并处理相关文件。
}
}
}
插件开源
本工程已依照2.0版本协议进行开源,同时已将插件发布至市场平台,热忱邀请大家关注并下载。
:https://.com/kymjs/
插件下载: https://..com//20047-
插件下载
打开 -> -> ->
搜索
点击下载
重启
https://.cn//img/image/.jpg
向大家推荐我的网站,网址是https://www.yuque.com/,只需点击原文即可一键直达。
专注 -- 欢迎大家访问
往期推荐
如有侵权请联系删除!
Copyright © 2023 江苏优软数字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服务提供商
13262879759
微信二维码