====== Java Null Check static analysis ====== * [[java:jspecify|jspecify]] * [[java:checker|Checker Framework]] - [[https://checkerframework.org/manual/#nullness-checker|Nullness Checker]] * [[java:null_away|NullAway]] * [[http://fbinfer.com/docs/eradicate.html|Eradicate]] * Java 에는 null 검사 관련 애노테이션이 매우 다양하다. ===== Spring Framework null check annotations ===== * [[https://www.baeldung.com/spring-null-safety-annotations|Spring Null-Safety Annotations | Baeldung]] * [[https://sites.google.com/site/pawneecity/sprint-boot/null-safety-spring-boot|Null-safety (Spring Boot)]] * [[https://reflectoring.io/spring-boot-null-safety-annotations/|Protect Your Code from NullPointerExceptions with Spring's Null-Safety Annotations]] * [[:intellij_idea|IntelliJ IDEA]], [[java:spotbugs|SpotBugs]], [[java:sonarqube|SonarQube]] 등에서 인식한다. ===== Null 검사 Annotation과 FindBugs ===== * **JSR 305 annotation** 은 ''javax'' 로 패키지가 시작되는데 이것은 Oracle 정책상 라이센스 위반이라서 사실상 사용 금지된 상태로 보인다. * 그래도 JSR 305가 좋다는 글 - [[https://dzone.com/articles/when-to-use-jsr-305-for-nullability-in-java|When to Use JSR 305 for Nullability in Java - DZone]] * Null관련해서 소스에 지정하는 것은 [[java:findbugs|Java FindBugs]]의 JSR 305 annotation 을 사용한다. 이 어노테이션을 여러 Null Check 프레임워크들이 공통으로 사용한다. * ''@javax.annotation.Nullable'' : null 일 수 있는 파라미터, 리턴값 등에 지정한다. * ''@javax.annotation.Nonnull'' : 어노테이션을 지정하지 않은 파라미터 리턴값등은 무조건 ''@Nonnull'' 로 자동 지정된다. * Findbugs 자체는 의도적으로 null check를 느슨하게 하여 false alarm을 줄여놔서 촘촘하게 검사하지 못한다고 한다. * 혹은 Uber [[java:null_away|NullAway]], [[java:checker|Checker Framework]]를 사용하는게 나을 듯. ===== 참조 ===== * [[https://www.beyondjava.net/getting-rid-of-the-nullpointerexception-in-2020|Getting Rid of the NullPointerException - 2020 Edition]] * [[https://stackoverflow.com/questions/4963300/which-notnull-java-annotation-should-i-use/42695253#42695253|nullpointerexception - Which @NotNull Java annotation should I use? - Stack Overflow]] * [[https://dzone.com/articles/when-to-use-jsr-305-for-nullability-in-java|When to Use JSR 305 for Nullability in Java - DZone]] * [[https://checkerframework.org/manual/#nullness-related-work|The Checker Framework Manual: Custom pluggable types for Java]] - [[java:checker|Checker Framework]] 외의 다른 null check annotation 목록.