{"id":23395873,"url":"https://github.com/halfmoonly/feignx-plugin","last_synced_at":"2025-04-11T14:13:14.393Z","repository":{"id":267793620,"uuid":"874593673","full_name":"Halfmoonly/feignx-plugin","owner":"Halfmoonly","description":"IntelliJ IDEA开源插件FeignClient Assistant，Jetbrains官方推荐！动态监测Restful接口，跨模块实现FeignClient与远程服务ApiController方法级别的代码导航跳转。支持完整URL路径复制剪切板。支持服务端配置文件yml/yaml/properties解析，支持servlet以及springmvc全局请求上下文拼接。","archived":false,"fork":false,"pushed_at":"2025-04-07T14:02:52.000Z","size":3500,"stargazers_count":29,"open_issues_count":1,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T14:41:47.597Z","etag":null,"topics":["copy-paste","feignx","gradle","intellij-idea","jetbrains-plugin","navigator4url","openfeign","restcontroller","springcloud"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Halfmoonly.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-18T05:42:57.000Z","updated_at":"2025-04-07T13:59:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"96660c82-2131-4ee4-befe-767592bfb66e","html_url":"https://github.com/Halfmoonly/feignx-plugin","commit_stats":null,"previous_names":["halfmoonly/feignx-plugin"],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Halfmoonly%2Ffeignx-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Halfmoonly%2Ffeignx-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Halfmoonly%2Ffeignx-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Halfmoonly%2Ffeignx-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Halfmoonly","download_url":"https://codeload.github.com/Halfmoonly/feignx-plugin/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248415021,"owners_count":21099590,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["copy-paste","feignx","gradle","intellij-idea","jetbrains-plugin","navigator4url","openfeign","restcontroller","springcloud"],"created_at":"2024-12-22T07:18:45.635Z","updated_at":"2025-04-11T14:13:14.384Z","avatar_url":"https://github.com/Halfmoonly.png","language":"Java","readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./feignx/src/main/resources/icons/feignAction.svg\" height=\"64\"\u003e\n  \u003cimg src=\"./feignx/src/main/resources/icons/clipboard.svg\" height=\"64\"\u003e\n  \u003ch2\u003eFeignClient Assistant\u003c/h2\u003e\n\u003c/div\u003e\n\n## 贡献者名单\n\n\u003ca href=\"https://github.com/Halfmoonly/feignx-plugin/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=Halfmoonly/feignx-plugin\" /\u003e\n\u003c/a\u003e\n\n## 我们更名啦，FeignClient Assistant\n\n曾用名：[FeignX]/[Navigator4URL OpenFeign RestController]\n\n已上架IntelliJ IDEA插件市场：https://plugins.jetbrains.com/plugin/25604-navigator4url-openfeign-restcontroller\n- 2025/03/12 官方市场用户下载量突破5000\n- 2025/03/20 官方市场用户下载量突破6000\n- 2025/03/26 官方市场用户下载量突破7000\n- \n\n求star⭐⭐\n## 使用教程\nIntelliJ IDEA内Settings-\u003eplugins-\u003eMarketplace-\u003e搜索FeignClient Assistant下载安装\n\n---\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./feignx/pics/ReadmeMarketplace.png\"\u003e\n  \u003cp\u003eMarketplace\u003c/p\u003e\n\u003c/div\u003e\n\n\n中文说明：\n\nFeignClient Assistant是一个免费的SpringCloud FeignClient与远程SpringBoot ApiController之间的代码导航助手。作者：刘岩\n\n1. 受MybatisX和方法级导航槽‘ Bird ’的启发，FeignClient Assistant使您可以灵活地在FeignClient客户端和远程服务ApiController之间来回跳转。\n2. 通过解析yml/yaml/属性，FeignClient Assistant支持“server.servlet”。‘ Context-path ’和‘ spring.mvc.servlet.path ’\n3. 经过多轮优化，FeignClient Assistant解析足够准确，并且支持目标导航多选项。\n4. 经过多轮双边缓存优化，FeignClient Assistant具有足够的高性能。\n5. FeignClient Assistant支持URL全路径复制到剪贴板（包括Feign和Controller接口），以帮助Vim朋友。\n\n附图演示：\n\neg. FeignClent  方法导航跳转至 FeignClient，与URL全路径一键剪切板拷贝\n\u003cdiv align=\"left\"\u003e\n  \u003cimg src=\"./feignx/pics/snipping-feignClient.png\"\u003e\n\u003c/div\u003e\n\neg. ApiController  方法导航跳转至 FeignClient，与URL全路径一键剪切板拷贝\n\n\u003cdiv align=\"left\"\u003e\n  \u003cimg src=\"./feignx/pics/snipping-apiController.png\"\u003e\n\u003c/div\u003e\n\n## 更新日志\n### 🚀FeignClient Assistant:v1.0.0\n- 跨模块实现FeignClient导航ApiController功能：FeignClient-ApiController Mutually Navigation\n- 跨模块实现ApiController导航FeignClient功能：ApiController-FeignClient Mutually Navigation\n\n### 🚀FeignClient Assistant:v2.1.0\n适配最新版本的IntelliJ IDEA\n\n### 🐞FeignClient Assistant:v3.0.0\n[fix] 重大bug修复，修复了由于缓存导致的目标接口动态监测失效的问题\n\n### 🚀FeignClient Assistant:v4.0.0\n[feat] 重大功能更新，server端适配了springboot配置文件application.properties/application.yml/application.yaml的解析机制：\n\n支持以下配置的解析\n1. tomcat配置属性：server.servlet.context-path\n2. springmvc配置属性：spring.mvc.servlet.path\n\n![DispatcherServlet.png](feignx/pics/DispatcherServlet.png)\n\n在 Spring Boot 出现之前，Dispatcher Servlet 是在 web.xml 文件中声明的，如下图\n```xml\n\u003cweb-app\u003e\n   \u003cservlet\u003e\n         \u003cservlet-name\u003eexample\u003c/servlet-name\u003e \n        \u003cservlet class\u003e \n             org.springframework.web.servlet.DispatcherServlet \n        \u003c/servlet-class\u003e \n        \u003cload-on-startup\u003e1\u003c/load -on-startup\u003e \n    \u003c/servlet\u003e\n   \u003cservlet-mapping\u003e\n        \u003cservlet-name\u003etest\u003c/servlet-name\u003e \n        \u003curl-pattern\u003e*.test\u003c/url-pattern\u003e \n   \u003c/servlet-mapping\u003e\n \u003c/web-app\u003e\n```\n\n这个DispatcherServlet是实际的Servlet，它继承自基类HttpServlet。\n\n在 Spring Boot 出现之后，spring-boot-starter-web starter 自动装配机制将DispatcherServlet默认配置为 URL 模式“/”。\n\n但是，如果需要，我们可以使用自定义 URL 模式。application.properties文件中如下\n```properties\nserver.servlet.context-path=/hello\nspring.mvc.servlet.path=/world\n```\n\n通过上面的配置，DispatcherServlet被配置为处理 URL 模式/world，并且springboot根上下文路径将是/hello。因此，DispatcherServlet监听http://ip/port/hello/world，，as prefix path by @FeignClient，the sample is below\n```java\n@FeignClient(path = \"/hello/world\",value = \"cloud-feign-server\", contextId = \"user\", configuration = UserConfiguration.class)\npublic interface UserClient {\n\n    @GetMapping(value = \"/user/get/{id}\")\n    User getUserById(@PathVariable(\"id\") Long id);\n}\n```\n\n\nyml/yaml配置同上。\n\n### 🚀FeignClient Assistant:v4.1.1\n\n适配了最新版IDEA的Light主题，欢迎在IDEA内在线更新至4.1.1版本（三天后上线），或者提前安装离线版体验！\nhttps://github.com/lyflexi/feignx-plugin/releases/tag/v4.1.1\n\n修复了issues:https://github.com/Halfmoonly/feignx-plugin/issues/3\n\n\n感谢官方工作人员的指引：Natalia Melnikova (JetBrains Marketplace) marketplace@jetbrains.com\n\n感谢社区的帮助与提示：https://intellij-support.jetbrains.com/hc/en-us/community/posts/22814305825042-Why-don-t-pluginIcon-svg-appear-in-Light-theme?page=1#community_comment_22848980293394\n\n感谢@yann Cebron：https://intellij-support.jetbrains.com/hc/en-us/profiles/1283051161-Yann-Cebron\n\n开发社区：https://intellij-support.jetbrains.com/hc/en-us/community/topics/200366979-IntelliJ-IDEA-Open-API-and-Plugin-Development\n\n### 🚀FeignClient Assistant:v4.1.3\nthanks my friend's pr : https://github.com/Halfmoonly/feignx-plugin/pull/9\n1. Adapted bootstrap.properties/bootstrap.yml/bootstrap.yaml\n2. Adapted many writtings of path，as @FeignClient(path = \"/sys\") and @FeignClient(path = \"sys\") and @FeignClient(path = \"sys/\")\n\n\n### 🚀FeignClient Assistant:v4.1.5\n极少数分布式场景下的nacos需要以下配置，往往会配置在本地的bootstrap.yml/yaml中，而非application.yml/yaml中\n\n1. server.servlet.context-path = /hello\n2. spring.mvc.servlet.path = /world\n\n此版本修复了FeignX读取本地bootstrap.yml/yaml中上述配置失效的问题\n\n### 🐞FeignClient Assistant:v4.1.6\nFeignX 4.1.5 is binary incompatible with IntelliJ IDEA Ultimate IU-193.7288.26 due to the following problem Method not found . This can lead to NoSuchMethodError exception at runtime.\n\nFeignx:v4.1.6 resolve IntelliJ IDEA Ultimate 2019.3.51 compatibility problem.\n\n- remove 1 usage of deprecated API (V1.381)\n- Invocation of unresolved method PsiEditorUtil.findEditor(PsiElement)\n- Method SearchControllerAction.navigateToControllerCode(...) contains an invokestatic instruction referencing an unresolved method PsiEditorUtil.findEditor(PsiElement).\n\n--- \n### 🚀 FeignClient Assistant:v4.1.8\nv4.1.8发布——对应分支main-fix-cachev2\n\nreslove issue #10：https://github.com/Halfmoonly/feignx-plugin/issues/10\n\n        1. 我们更名啦，由FeignX更名为FeignClient Assistant\n        2. 极致提升性能，引入CacheManager，管理双边缓存FeignInterface和ApiController\n        3. 欢迎Star：https://github.com/Halfmoonly/feignx-plugin\n\n[feignx-4.1.8.zip](https://github.com/user-attachments/files/19140074/feignx-4.1.8.zip)\n\n\n### 🐞 FeignClient Assistant:v4.1.9\nv4.1.9发布——对应分支main-fix-cachev3\n\n我们优化了双边缓存更新策略（Optimize cache update policies）\n\nhttps://github.com/user-attachments/files/19148594/OpenFeign.Assistant-4.1.9.zip\n\n\n### 🚀 FeignClient Assistant V5.1.0 更新内容\nreslove issue #6：https://github.com/Halfmoonly/feignx-plugin/issues/6\n\n\n1. 我们又更名啦[笑哭]，由FeignX更名为FeignClient Assistant\n2. 为了方便Vim党，我们支持了url完整路径复制至剪切板（Feign接口和Controller接口均支持）\n3. 欢迎Star：https://github.com/Halfmoonly/feignx-plugin\n\n朋友们记得先将zip解压出jar包，再离线安装jar包哟~~：https://github.com/user-attachments/files/19149196/Navigator4URL.OpenFeign.RestController-5.1.0.zip\n\n### 🐞 FeignClient Assistant V5.1.1 更新内容\n修复分支：hotfix/main-copy-notify\n\n1. 我们修复了一键复制URL功能的消息通知失败的问题，以及偶先空指针的现象\n\n2. 我们优化了Copy-Gutter和Bird-Gutter的展现位置，将其从方法签名处移至RequestMapping等Rest注解处，这样更加符合直觉\n\n3. 我们优化了Copy-Gutter和Bird-Gutter的动态解析，使用户后期在修改方法签名的时候（如添加/**/注释或者添加自定义业务注解的时候），Gutter的位置随着RequestMapping等Rest注解的位置动态生效\n\n4. 我们优化了一键复制URL功能的Copy-Gutter图标设计，更加的优雅\n\n\n### 🐞 FeignClient Assistant V5.1.2 更新内容\n\n1. 我们修复了https://github.com/Halfmoonly/feignx-plugin/issues/11，这曾经是个已经被修复但忘记合并至主分支的修复分支：hotfix/main-fix-bootstrap，见：https://github.com/Halfmoonly/feignx-plugin/issues/8\n\n\n### 🐞 FeignClient Assistant V5.2.0 更新内容\n本次对应修复/缓存优化/多线程优化/API优化的分支：main-fix-cachev4\n\n1. 我们优化了双边缓存的更新机制，同时重构了缓存框架，大大提升了插件性能\n2. 我们优化了用户打注释/***/的时候，由于psiMethod丢失，可能导致的空指针异常\n3. 我们使用了IntelliJ的类快速索引缓存系统PsiShortNamesCache，狠狠加速了原来的手写磁盘递归扫描Class（allJavaFileClass）\n4. 我们使用了Java线程池，加速了初始化过程中，构建出全量接口方法对象HttpMappingInfos的速度（ApiControllers和FeignClients）\n5. 我们使用了IntelliJ的带缓存的注解判断方法psiMethod.hasAnnotation，加速了类型判断（ApiController和FeignClient）\n\n重构的双边缓存架构：\n\n![Bilateral-cache.png](feignx/docs/Bilateral-cache.png)\n\n有匪君子，如切如磋，如琢如磨--2025/03/15 凌晨两点\n\n### 🚀 FeignClient Assistant V5.2.1 更新内容\n对应分支：feat/main-parallel\n\n默认IO密集型程序核心线程数为`2*N`，并自定义了线程池，优化初始化过程中，构建出全量接口方法对象HttpMappingInfos的速度（ApiControllers和FeignClients）\n\n### 🚀 FeignClient Assistant V5.3.0 更新内容\n对应分支：feat/main-cache\n\n我们额外自定义了项目初始化PsiClass缓存管理器InitialPsiClassCacheManager，将原先的两次全盘allJavaFileClass扫描降低为1次，狠狠加速了原来手写的磁盘递归扫描\n\n### 🐞 FeignClient Assistant V5.3.1 更新内容\n对应分支：main-fix-dead\n\n1. 修复了偶发的卡死现象\n\n### 🐞 FeignClient Assistant V5.3.2 更新内容\n对应分支：main-fix-dead2\n\n1. 修复了偶发的卡死现象\n\n### 🐞🚀 FeignClient Assistant V5.4.0 更新内容\n对应分支：hotfix/main-dead\n\n1. feat: 合并了来自开发者的一个特性PR：https://github.com/Halfmoonly/feignx-plugin/pull/14 ,支持Restful注解path中的变量或者静态常量的解析（FeignClient和ApiController），感谢@wdhcr\n\n![restful-path-constant.png](feignx/pics/restful-path-constant.png)\n\n2. fix: 重大bug修复，彻底修复了打开多个IDEA项目时候偶发的卡死现象，我们定位到是线程池的问题并做出了修复与避免。希望反馈的朋友们耐心等待此版本上架\n\n### 🚀 FeignClient Assistant v5.5.0更新内容\n对应分支feat/main-tab-svg\n\n1. 我们上线了FeignClient类文件和Tab页签的图标替换功能，默认开启，用户可以在IDEA设置面板中关闭，修改配置后记得重启IDEA。\n2. 你将体验到全新的UI设计风格，包括URL路径一键复制，希望大家喜欢(❤ ω ❤)\n\n![user-settings.png](feignx/pics/user-settings.png)\n\n### 🐞 FeignClient Assistant v5.5.1版本修复如下异常\n\n修复分支：hotfix/main-fix-tabsvg\n\n定位到是由于v5.5.0中上线的类文件的图标替换功能导致 PSI 元素失效，影响了原先正常的主流程解析逻辑\n\n1. 文件被修改（例如用户编辑代码）。\n2. PSI 元素的访问必须在 读操作（Read Action） 或 事件分发线程（EDT） 中进行。\n3. 如果在后台线程（非 EDT）直接访问 PSI 元素，可能导致元素失效。\n4. 未检查元素有效性等\n```\ncom.intellij.psi.PsiInvalidElementAccessException: Element: class com.intellij.psi.impl.source.PsiClassImpl #JAVA \ninvalidated at: see attachment\n    at com.intellij.psi.impl.source.SubstrateRef$1.getNode(SubstrateRef.java:43)\n    at com.intellij.extapi.psi.StubBasedPsiElementBase.getNode(StubBasedPsiElementBase.java:133)\n    at com.intellij.psi.impl.source.PsiClassImpl.getNode(PsiClassImpl.java:102)\n    at com.intellij.psi.impl.source.PsiClassImpl.getNode(PsiClassImpl.java:36)\n    at com.intellij.extapi.psi.StubBasedPsiElementBase.getStubOrPsiChild(StubBasedPsiElementBase.java:36\n    at com.intellij.extapi.psi.StubBasedPsiElementBase.getRequiredStubOrPsiChild(StubBasedPsiElementBase.java:375)\n    at com.intellij.psi.impl.source.PsiClassImpl.getModifierList(PsiClassImpl.java:170)\n    at com.intellij.psi.PsiJvmConversionHelper.hasListAnnotation(PsiJvmConversionHelper.java:57)\n    at com.intellij.psi.PsiModifierListOwner.hasAnnotation(PsiModifierListOwner.java:45)\n    at com.intellij.psi.PsiJvmModifiersOwner.hasAnnotation(PsiJvmModifiersOwner.java:32)\n    at com.lyflexi.feignx.utils.AnnotationParserUtils.isFeignInterface(AnnotationParserUtils.java:101)\n    at com.lyflexi.feignx.utils.FeignClassScanUtils.feignsOfPsiClass(FeignClassScanUtils.java:123)\n    at com.lyflexi.feignx.utils.FeignClassScanUtils.scanFeignInterfaces(FeignClassScanUtils.java:107)\n    at com.lyflexi.feignx.provider.C2FLineMarkerProvider.collectNavigationMarkers(Controller2FeignLineMarkerProvider.java:43)\n...\n```\n### 🐞 FeignClient Assistant v5.5.2版本修复如下异常\n\n修复分支：hotfix/main-fix-tabsvg2\n\n1. 修复了回车键可能导致的方法旁gutter失效的问题\n\n### 🐞 FeignClient Assistant v5.5.3更新内容\n修复分支：main\n\n1. 修复了二次打开项目的时候,有gutter,但无法跳转的问题\n\n### 🐞 FeignClient Assistant v5.5.4更新内容\n修复分支：hotfix/main-fix-gitpull\n\n1. 修复了git pull操作变更了psiclass导致的gutter跳转失效的问题\n\n### 🐞 FeignClient Assistant v5.5.5更新内容\n修复分支：main\n\n1. 修复了异常：invalidated at: see attachment\n\n### 🐞 FeignClient Assistant v5.5.6更新内容\n修复分支：main\n\n1. 修复了异常：java.lang.Throwable: Smart pointers must not be created during PSI changes\n\n### 🐞 FeignClient Assistant v5.5.7更新内容\n修复分支：main\n\n1. 修复了异常：PsiInvalidElementAccessException\n\n### 🐞 FeignClient Assistant v5.5.8更新内容\n修复分支：main\n\n1. 重新设计了UI，修复了图标在Tab页签中无法居左显示的问题。\n\n---\n\n我们欢迎各位的宝贵意见(^^ゞ)\n\n**诚邀广大开发者大佬们的Pull Request，让我们一起完善FeignClient Assistant(FeignX)插件**\n\n最新版本插件请及时关注IntelliJ IDEA插件市场更新FeignClient Assistant\n\nhttps://plugins.jetbrains.com/plugin/25604-navigator4url-openfeign-restcontroller\n\nIDEA内插件市场一键安装最方便哟~~\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhalfmoonly%2Ffeignx-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhalfmoonly%2Ffeignx-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhalfmoonly%2Ffeignx-plugin/lists"}