ConfigMe icon indicating copy to clipboard operation
ConfigMe copied to clipboard

Test for missing @NotNull / @Nullable annotations

Open ljacqu opened this issue 2 years ago • 1 comments

Write a unit test that scans the parameters of methods and constructors, and the return value of methods and that reports any that don't have @NotNull or @Nullable.

To do

  • Add org.reflections as a test dependency
  • Write a test that collects all classes of ConfigMe
    • Skip classes that end in "Test"
  • Collect all method/constructor params and method return values
  • Report all instances where neither nullability annotation is used
    • Special case arrays: T @NotNull [] is how the array itself is reported not null. Probably should also check the component if possible?
    • Begs the question what to do with other generic types such as List<String> (vs. List<@NotNull String>)...?

ljacqu avatar Aug 24 '23 12:08 ljacqu

Seems impossible to do currently:

  • @NotNull and @Nullable have SOURCE retention, so need to use org.reflections or javassist to pick out the values
  • org.reflections has no way of returning whether a specific method parameter has an annotation
  • javassist has a bug where it thinks @Foo String[] means the array is annotated, while it's supposed to be String @Foo []. This leads to a lot of false positives.

ljacqu avatar Aug 30 '23 12:08 ljacqu