阅读 88

IDEA对jsr305的Nonnull注解和Guava的Beta注解的支持

前言

jsr305是一个规范,具体来说是一套用来给代码分析工具(如IDEA)检查代码缺陷用的注解,类似jsr303(Bean Validation规范)。今天在学习Spring源码时,发现其中使用到了jsr305中的注解。


Spring中的NonNull注解中使用到了jsr305中的Nonnull注解,可以看做是对Nonnull注解的一个封装。

IDEA对jsr305注解的支持

引入jsr305和spring核心的maven依赖


   com.google.code.findbugs
   jsr305
   3.0.2


   org.springframework
   spring-core
   5.2.1.RELEASE

测试代码

import org.springframework.lang.NonNull;

public class Client2 {

  @NonNull
  private static String test() {
    return null;
  }

}

这种情况IDEA就会有警告,提示方法返回结果可能为null

原理

那么IDEA是如何认识Spring的注解的呢,查找得知,IDEA应该不认识Spring的注解,但它认识jsr305的注解,而Spring注解NonNull中使用到了jsr305的注解javax.annotation.Nonnull类。

/**
 * A common Spring annotation to declare that annotated elements cannot be {@code null}.
 *
 * 

Leverages JSR-305 meta-annotations to indicate nullability in Java to common * tools with JSR-305 support and used by Kotlin to infer nullability of Spring API. * *

Should be used at parameter, return value, and field level. Method overrides should * repeat parent {@code @NonNull} annotations unless they behave differently. */ @Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Nonnull @TypeQualifierNickname public @interface NonNull { }

可以看到,IDEA本身配置了一些关于代码分析的注解,其中就包括了jsr305的javax.annotation.Nonnull注解。

自定义检查注解

我们也可以配置我们自定义的注解。

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyNonnull {
}

将自定义注解添加到配置中

可以看到,自定义注解在代码中也是生效的。

IDEA对Guava的Beta注解的支持

引入Guava的maven依赖


  com.google.guava
  guava
  27.1-jre

代码测试

import com.google.common.io.ByteStreams;

public class Client3 {

  public static void main(String[] args) {
    System.out.println(ByteStreams.nullOutputStream());
  }

}

IDEA会有代码警告,因为ByteStreams的nullOutputStream()方法被@Beta注解修饰。

原理

IDEA本身配置了一些关于不稳定API的注解,只要被这些注解修饰,IDEA就会有代码提示。

总结

上述两个功能只是IDEA的代码检查提供功能的很小一部分,更多关于IDEA的代码检查的信息,可以查看 。

参考



原文:https://www.cnblogs.com/strongmore/p/15302475.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐