【IDEA插件开发】Quick Fix 快速修复插件开发

本文介绍了如何开发IntelliJ IDEA的Quick Fix功能插件,该插件针对SpringMVC中缺少注解的方法提供警告并提供快速修复。文章详细讲解了Annotator、quick fix的开发过程,以及FixAnnotationEnum和插件注册步骤,并通过实例展示了快速修复的效果。
摘要由CSDN通过智能技术生成


前言

以下代码为开发idea quick fix功能插件演示代码,该代码实现的功能是:对于标注有SpingMVC中的 GetMappingPostMappingPatchMappingPutMappingDeleteMappingRequestMapping等注解等方法,若没有同时标注LevenApi注解,则在方法名上会出现警告,提示开发者加上LevenApi注解,此时使用quick fix的功能即可在方法上生成LevenApi注解。


一、Quick Fix是什么?

quick fix就是快速修复的意思,在idea编辑代码的时候,当我们输入一些违法或者是不安全(或是不推荐)的代码时,idea会自动帮我们检测出来,并使用红色或黄色波浪线提示我们修改代码。对于有些非法或者是不推荐的代码,idea能够推测出正确或者是被推荐的代码时,就会给我们提供一个快速修复的功能,这个功能就是quick fix。
而前面的检测行为则是由Annotator功能完成的,因此quick fix通常是跟着Annotator出现的,而有Annotator却不一定有quick fix(就是没有推荐修改的情况)。


常见的quick fix场景-导入类
以上图片演示就是常见的quick fix场景——导入类。红色方块就是Annotator,提示“无法解析BigDecimal”;橙色框则是quick fix,通过点击Import class或者使用快捷键(Windows是alt + enter,Mac是option + enter)快速导入BigDecimal类。


二、开发quick fix 通常包含两部分

1. Annotator

筛选出需要quick fix的代码段:校验标注有SpringMVC mapping相关注解的方法是否同时标注有@LevenApi注解,如果没有则在这个方法名上添加Annotator,提示需要加上@LevenApi注解

package run.leven.fix;

import com.intellij.codeInspection.ProblemHighlightType;
import com.intellij.lang.annotation.AnnotationHolder;
import com.intellij.lang.annotation.Annotator;
import com.intellij.lang.annotation.HighlightSeverity;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
import org.jetbrains.annotations.NotNull;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * Create By  leven [2021/12/21 9:34 下午]
 */
public class LevenApiAnnotator implements Annotator {
   
    
    private static final Set<String> MAPPING_NAME_SET;
    static {
   
        MAPPING_NAME_SET = new HashSet<>(
                Arrays.asList(
                        FixAnnotationEnum.PatchMapping.getQualifiedName(),
                        FixAnnotationEnum.PutMapping.getQualifiedName(),
                        FixAnnotationEnum.PostMapping.getQualifiedName(),
                        FixAnnotationEnum.GetMapping.getQualifiedName(),
                        FixAnnotationEnum.RequestMapping.getQualifiedName(),
                        FixAnnotationEnum.DeleteMapping.getQualifiedName()
                
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值