是否有Sonar,Findbugs或PMD规则检测CodePro检测到的这种可能的NPE?

时间:2013-04-17 23:25:34

标签: java sonarqube findbugs pmd codepro

假设我有一段这样的代码:

Map<String, Object> mappy = 
    (Map<String, Object>)pExtraParameters.get(ServiceClientConstants.EXTRA_PARAMETERS);

if (pSSResponseBean!=null) {
    mappy.put(AddressResearchContext.CSI_RESPONSE_BEAN, (AddressNotFoundResponseBean)pSSResponseBean); // this line may  throw null pointer
}

是否存在将“mappy”标记为可能为空的Sonar,Findbugs或PMD规则?显然CodePro标记了这一点,如果可能的话,我需要提供类似的东西。

1 个答案:

答案 0 :(得分:0)

问题在于,FindBugs将未注释的项视为使用@Nullable进行注释,这会导致它忽略对它们的空值检查。您可以创建一个使用自定义java.util注释注释的空@ReturnValuesAreCheckForNullByDefault包(修改@ReturnValuesAreNonnullByDefault),但它将适用于每个每个方法/ em>该包中的类。

@ReturnValuesAreCheckForNullByDefault
package java.util;

import edu.umd.cs.findbugs.annotations.ReturnValuesAreCheckForNullByDefault;

另一种选择是创建使用Map注释的@CheckForNull外观。

public class AnnotatedMap<K, E> implements Map<K, E>
{
    private final Map<K, E> wrapped;

    @CheckForNull
    public E get(K key) {
        return wrapped.get(key);
    }
    ...
}

更新:有关实施此建议的详细信息,请参阅我的previous answer类似问题。