L'outil de révision de code est plaint Pointeur NULL possible Déréférence de SAFESCANWarnings dans Savesafescan (...) em> à la ligne si (SafesScanWarnings! = Null & Safescanwarnings.Size ()> 0) Je me demande comment est-ce possible? Est-ce parce que nous retournons la collection par référence? P> protected void saveSafeScan(final Response response, final Dtec dtec) throws dtecException
{
Collection<String> safeScanWarnings = dtec.getSafeScanWarnings();
if (safeScanWarnings!=null && safeScanWarnings.size()>0)
{
Iterator<String> iterator = safeScanWarnings.iterator();
int i = 0;
while (iterator.hasNext())
{
String safeScanCode = iterator.next();
if (i == 0)
{
response.setSafeScanCode(safeScanCode);
response.setSafeScanCodeText(getMessage(String.format("DTECRESPONSE_SAFESCANCODE_%s",
StringUtils.trimToEmpty(safeScanCode))));
}
SafeScanWarning safeScan = new SafeScanWarning();
safeScan.setCode(safeScanCode);
safeScan.setMessage(String.format("DTECRESPONSE_SAFESCANCODE_%s", StringUtils.trimToEmpty(safeScanCode)));
safeScan.setPriority(i);
response.getSafeScanWarnings().add(safeScan);
i++;
}
}
}
3 Réponses :
Si cela pointe vraiment sur cette ligne, cela ressemble à un bogue dans l'outil de révision du code pour moi. P>
Comme il s'agit d'une variable locale, il n'y a aucune chance que cela ne soit changé de quoi que ce soit d'autre entre la vérification de la nullité et la taille () code> appel - donc il n'y a aucun moyen qu'il va jeter un
NullpointException code>. P>
Il existe une branche de déclaration que, si elle est exécutée, garantit qu'un null code> sera déréférencé, ce qui générerait un
nullpointexception code> lorsque le code est exécuté. Bien sûr, le problème peut être que la branche ou la déclaration est infaisable et que le
nullpointException code> ne peut jamais être lancé. Décider qui dépasse la capacité de
Findbugs code>. p>
Attribut "DTEC" doit être sécurisé:
if (null!=dtec && null!=safeScanWarnings && safeScanWarnings.size()>0) { Collection<String> safeScanWarnings = dtec.getSafeScanWarnings();
Dans votre exemple, le code est correct dans votre erreur, le cas échéant est un
& code> et non
&& code>. Assurez-vous donc que dans le code réel, c'est l'évaluation de courte durée. Si c'est déjà le cas, c'est un bogue dans l'outil.
Remarquez votre commentaire au-dessus de l'échantillon de code, c'est
si (SafesScanWarnings! = NULL & SADRESCANWARNINGS.SIZE ()> 0) CODE> Ce qui est faux (buggy)