Chcę utworzyć niestandardowe adnotacje, aby ukryć poszczególne ostrzeżenia FindBugs, aby ułatwić korzystanie z nich za pomocą zakończenia kodu. Na przykład ten ignoruje konstruktory, które nie ustawiają wszystkich pól.Adnotacje niestandardowe w celu powstrzymania określonego ostrzeżenia FindBugs
@TypeQualifierDefault(ElementType.CONSTRUCTOR)
@SuppressFBWarnings("NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR")
@Retention(RetentionPolicy.CLASS)
public @interface SuppressNonnullFieldNotInitializedWarning
{ }
Mimo to nadal widzę ostrzeżenie podczas korzystania z adnotacji.
public class User {
@Nonnull
private String name;
@SuppressNonnullFieldNotInitializedWarning
public User() {
// "Nonnull field name is not initialized by new User()"
}
}
Próbowałem różnych polityk retencyjne i typy elementów, umieszczenie adnotacji na konstruktora i klasy, a nawet @TypeQualifierNickname
.
Ten sam wzór działa, aby zastosować @Nonnull
do wszystkich pól w klasie.
@Nonnull
@TypeQualifierDefault(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldsAreNonnullByDefault
{ }
FindBugs poprawnie wyświetla ostrzeżenie o kodzie, który wyznacza null
do name
.
@FieldsAreNonnullByDefault
public class User {
private String name;
public UserModel() {
name = null;
// "Store of null value into field User.name annotated Nonnull"
}
}
Uważam, że problemem jest to, że @SuppressFBWarnings
nie jest oznaczony @TypeQualifier
podczas @Nonnull
jest, a tym samym @TypeQualifierDefault
i @TypeQualifierNickname
nie stosują się do niego. Ale musi istnieć jakiś inny mechanizm do zastosowania jednej adnotacji za pomocą innej.
@Chris: To odpowiedź opisuje jak używać findbugs SuppressWarning adnotacja. To pytanie brzmi: jak utworzyć nową adnotację, która zignoruje ostrzeżenie o specjalnym locie. – TimK
@Chris Wysłałeś już drugi link: http://stackoverflow.com/questions/14285422/custom-annotation-to-suppress-a-specific-findbugs-warning#comment19837178_14285422 – steffen