标签: findbugs

如何在Findbugs中使用@CheckForNull等?

当我通过Findbugs运行时,我收到一个警告:

static @NonNull Object foo(@CheckForNull Object arg) {
    if (arg == null) { // warning on this line
        throw new NullPointerException();
    }
    return "something";

}
Run Code Online (Sandbox Code Playgroud)

警告的详细信息如下:

错误:arg必须是非空的,但标记为可为空的
模式ID : NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE,类型:NP,类别:STYLE

此参数始终以要求它为非空的方式使用,但该参数显式注释为Nullable.使用参数或注释是错误的.

有人能解释一下Findbugs在这里抱怨什么吗?

请注意,我使用的是edu.umd.cs.findbugs.annotations.*成员,而不是javax.annotations.*.(有区别吗?)

为Eclipse 3.6.1设置了FindBugs插件1.3.9.2009-.


Matthew Flaschen建议我使用@NonNull,但现在我遇到了这个问题:

static void blah(@NonNull Object arg) {
    if (arg == null) {
        throw new NullPointerException();
    }
    System.out.println(arg);
}

static @CheckForNull Object bleh() {
    return null;
}

//...
blah(bleh()); // warning …
Run Code Online (Sandbox Code Playgroud)

java eclipse null annotations findbugs

1
推荐指数
1
解决办法
3658
查看次数

使用Java的DelayQueue时,我是否应该实现equals()和hashCode()?

我正在处理一个使用a的类DelayQueue.我注意到,由于DelayQueue实现Delayed接口中的对象,所述对象也需要实现一个compareTo()已经完成的方法.

这是否隐含意味着我也应该考虑实施equals()方法和hashCode()方法?

我问的原因是因为我在通过FindBugs搜索项目时偶然发现了这个建议,而我正试图弄清楚这个特殊情况是否需要它.

java static-analysis findbugs

1
推荐指数
1
解决办法
479
查看次数

Findbugs的可能误报?

请参阅以下代码段(剥离冗余部分以突出显示有问题的情况):

FindBugs抱怨" 方法不会释放所有路径上的锁定 ".这是误报吗?如果没有,如何解决这个问题?

  try{
      someLock.lock();
     //do something
    } finally{
      if (someLock.isLocked())
        someLock.unlock();
    }
Run Code Online (Sandbox Code Playgroud)

java findbugs java.util.concurrent

1
推荐指数
1
解决办法
1010
查看次数

FindBugs警告:使用keySet迭代器效率低下

这是一个类似的问题[ FindBugs警告:使用keySet迭代器而不是entrySet迭代器的效率低下

但是,我想尝试做一些不同的事情.我目前的代码在这里:

for (Double key2 : sortedPolygons.keySet()) {
    if (sortedPolygons.get(key2).getExteriorRing().equals(hole)) {
        sortedPolygons.remove(key2);
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

在链接中执行类似解决方案的操作不起作用.以下是所述解决方案的实现:

for(Map.Entry<Double, Polygon> entry : sortedPolygons.entrySet()) {
    if (entry.getValue().getExteriorRing().equals(hole)) {
         .....
Run Code Online (Sandbox Code Playgroud)

这里的问题是我试图删除该条目.没有entry.remove().如何在没有FindBugs错误的情况下替换我的第一个代码块:

低效使用keySet迭代器而不是entrySet迭代器 - >

此方法使用从keySet迭代器检索的键访问Map条目的值.在map的entrySet上使用迭代器更有效,以避免Map.get(键)查找.

需要注意的是TreeMap,底层结构是,并且无法更改.

java iterator findbugs treemap sonarqube

1
推荐指数
1
解决办法
2997
查看次数

Findbugs告诉我,我没有明显的理由将非负值与-1进行比较

我有这个代码,它在FindBugs中显示以下错误:

在此输入图像描述

Bug: Bad comparison of nonnegative value with -1 in hydra.extensions.drivers.eg2.internal.EG2GatewaySimulator$1.run()

This code compares a value that is guaranteed to be non-negative with a negative constant or zero. 

Rank: Scary (5), confidence: High
Pattern: INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE 
Type: INT, Category: CORRECTNESS (Correctness)
Run Code Online (Sandbox Code Playgroud)

对于代码:

String receivedMessage = "";
char c;
boolean isValidChar;
do {
    c = (char) in.read();
    isValidChar = (c != '\r') && (c != -1);
    if (isValidChar) {
        receivedMessage += c;
    }
} while (isValidChar);
Run Code Online (Sandbox Code Playgroud)

java findbugs

1
推荐指数
1
解决办法
778
查看次数

为什么findbugs会在此代码中抛出空指针取消引用?

我通过Sonarqube在我们的代码上运行findbugs,我得到一个空指针取消引用的错误:

有一个语句分支,如果执行,则保证将取消引用空值.

错误的代码就是这样:

public static boolean isBigDecimalDifferent(BigDecimal x, BigDecimal y) {
        return (x != null || y != null)
                && ((x != null && y == null) || (x == null && y != null) || x.compareTo(y) != 0);   
}
Run Code Online (Sandbox Code Playgroud)

我想知道这是怎么可能的.唯一可以实现NPE的地方是调用x.compareTo(y),但如果x = null,那么Java永远不会分析那个分支,对吗?

这是一个错误,还是我错过了Java分析这个语句的方式?


UPDATE

感谢您的投入.我最后建议他们改变它:

if (x!=null && y != null)
    return x.compare(y);
else
    return x!=y;
Run Code Online (Sandbox Code Playgroud)

我觉得有点清楚.如果没有人同意这个改变,我会按照建议做,只是忽略这个问题,即使我宁愿避免这个.

java findbugs

1
推荐指数
1
解决办法
525
查看次数

FindBugs/SpotBugs:过滤器:DTO 或 XML 架构

简而言之:是否有用于 FindBugs/SpotBugs 过滤器文件的官方 DTD 或 XML 模式?

详细说明:在 FindBugs/SpotBugs 中,可以定义过滤器文件,它们是 XML 文件。我的 IDE 抱怨缺少 DTD 或 XML 架构,这很好。我知道如何抑制此警告,但我更喜欢添加正确的语法文件。因此,FindBugs/SpotBugs 过滤器文件是否提供了 DTD 或 XML Schema?我找不到一个。

xml findbugs spotbugs

1
推荐指数
1
解决办法
635
查看次数

拆箱 cameraCharacteristics 可能会产生 Nullpointer Exception 和 FindBugs

我无法处理导致FindBugs抛出错误的以下警告。

错误

我正在使用camera2 api。如您所见,我已经在检查 null 并另外捕获可能的 NullPointer 异常。CameraCharacteristics 类的 .get 方法使用 Nullable 进行注释,因此出现此错误。我不知道如何防止这种情况发生。检查 null 似乎不能完成这项工作。

同时,我将 SuppressFBWarnings Annotation 添加到我的项目中。但即使我抑制这样的警告:

@SuppressFBWarnings(value = "NP_NULL_ON_SOME_PATH")
private void setUpCamera(int width, int height) {
    try {
        for (String cameraId : cameraManager.getCameraIdList()) {
            CameraCharacteristics cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraId);

            if (cameraCharacteristics != null && cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) != null) {
                int lensFaceingCameraCharacteristics = cameraCharacteristics.get(CameraCharacteristics.LENS_FACING);

                if (cameraFacing == lensFaceingCameraCharacteristics) {
                    StreamConfigurationMap streamConfigurationMap = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
                    previewSize = getPreviewSize(streamConfigurationMap.getOutputSizes(SurfaceTexture.class), width, height);
                    this.cameraId = cameraId;
                }
            }
        }
    } catch (CameraAccessException | NullPointerException …
Run Code Online (Sandbox Code Playgroud)

java android unboxing annotations findbugs

1
推荐指数
1
解决办法
1586
查看次数

这些FindBug消息显示了什么?

不是来自http://findbugs.sourceforge.net/bugDescriptions.html的所有描述对我来说都很清楚.当然,我可以研究实施,但如果有人比我更有经验,一些解释和例子会很棒.

  • 当遇到问题时,您是否有UI_INHERITANCE_UNSAFE_GETRESOURCE的示例?
  • 在BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR中,我也没有看到问题.如果一个类型比另一个类型"更大",例如int和float,那么结果是float.如果它的整数和浮动它的包装Float也是.这就是我的期望.
  • GC_UNRELATED_TYPES真的有助于查找错误吗?是不是编译器的工作要检查,如果 - 采取给定的例子 - Foo不能进入Collection<String>.
  • HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_CLASS是否意味着' bla(Foo f){hashtable.put(f);}F'哪个不可清洗?FingBugs也"看到"了子类吗?
  • NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH比NP_ALWAYS_NULL_EXCEPTION强"错"吗?为什么两个错误情况和NP_NULL_ON_SOME_PATH_EXCEPTION甚至还有一个?听起来和我很相似.
  • 什么是SIO_SUPERFLUOUS_INSTANCEOF的示例?有点像foo(String s){if (s intenceof String) ....这也是一个空检查,但这不是这里的测试...
  • NN_NAKED_NOTIFY.我的意见我的描述不清楚.不需要改变国家.如果我使用新的Object()来等待并通知我不改变对象状态.或者说是锁定状态?我不明白.
  • SP_SPIN_ON_FIELD.这真的会发生,编译器会将其移出循环吗?这对我来说没有意义,因为从外部线程可以随时更改值.如果变量是volatileJVM无法缓存的值.那是什么意思?
  • 这是STCAL_STATIC_CALENDAR_INSTANCE和STCAL_INVOKE_ON_STATIC_CALENDAR_INSTANCE或STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE/STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE之间的区别?
  • 为什么WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL中的XXXX.class比getClass()更好?从子类调用的超类中的getClass()将始终从子类返回Class对象,我认为这是好的.
  • EQ_UNUSUAL究竟做了什么?它应该检查参数是否与类本身的类型相同,但它不是吗?
  • 你有过休息的问题吗?SF_SWITCH_FALLTHROUGH有真正的价值吗?听起来对我很强烈.
  • 不知道TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALWAYS_SINK和TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEVER_SINK是什么.

java findbugs

0
推荐指数
1
解决办法
4467
查看次数

奇怪的Findbugs错误与equals

我等于这个方法,但Findbugs报告错误,任何想法?

@Override
public boolean equals(final Object obj) {
    return obj instanceof String && this.value != null  
                              && this.value.equals(obj);      // this.value is a String
}
Run Code Online (Sandbox Code Playgroud)

错误是:

Myclass.equals(Object) 检查操作数是否为String

java static-analysis findbugs equals

0
推荐指数
1
解决办法
1959
查看次数

指令分配一个值,但不会在任何后续指令中读取或使用该值

我有一段代码

for(int i = 0; i < num_of_random; i++){

    String str = in.readLine();
    if(str != null){
        String[] randoms = new String[4];
        randoms = str.split(",");

        dateRanges[i] = Integer.parseInt(randoms[0]);
        id[i] = Integer.parseInt(randoms[1]);
        flag[i] = Integer.parseInt(randoms[2]);
        system[i] = Integer.parseInt(randoms[3]);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我针对findBugs运行此代码时,我得到了一个建议

"String [] randoms = new String [4];"

此指令为局部变量赋值,但不会在任何后续指令中读取或使用该值.通常,这表示错误,因为从未使用计算的值.

为什么我这样做?

非常感谢

java variables findbugs

0
推荐指数
1
解决办法
676
查看次数

Findbugs错误 - 错误:br为null保证在异常路径上取消引用

我需要读一个属性文件.我正在使用BufferedReader和FileReader来实现此目的.我在try部分之前将BufferedReader初始化为null并在try部分初始化.最后,我正在关闭读者.此时,我收到标题中提到的错误.

完整的代码如下

public void getPageTitleProperties() throws IOException
    {

        BufferedReader br = null;
        String lhs, rhs;
        try 
        {
            br = new BufferedReader(new FileReader("res" + File.separator + "pagetitle.properties"));
            String line;
            while ((line = br.readLine()) != null) 
            {
                String [] keyvalue = line.split("=");
                lhs = keyvalue[0];
                rhs = keyvalue[1];
                expectedTitles.put(lhs, rhs);
            }
        }
        catch (RuntimeException ex)
        {
            ex.printStackTrace();
        }
        catch (IOException ex)
        {
            ex.printStackTrace();
        }
        finally
        {
            br.close();
        }

        System.out.println("Expected URLs and Titles");
        for (String url : expectedTitles.keySet())
        {
            System.out.println(url + ":" + …
Run Code Online (Sandbox Code Playgroud)

java eclipse findbugs

0
推荐指数
1
解决办法
2860
查看次数

在构造函数中创建Random时,摆脱FindBugs"只创建一次使用的随机对象"

我想摆脱FindBugs警告"DMI:随机对象创建并仅使用一次".在以下示例中,随机数仅在对象构造时生成一次.换句话说,对于类的单个实例的生命周期Wrap,java.util.Random将不会创建其他实例.有没有办法摆脱这个警告(除了添加注释),特别java.util.Random是在构造函数中实例化的情况下?

public final class Wrap {

    /**
     * Random generated double.
     */
    private final double random;

    /**
     * Constructor.
     */
    public Wrap() {
        this.random = new Random().nextDouble();
    }

    public Double value() {
        return this.random;
    }

}
Run Code Online (Sandbox Code Playgroud)

java random findbugs

0
推荐指数
1
解决办法
1450
查看次数