Tag: findbugs

如何在java中处理bug“dead store to local variable”?

我写了一个简单的测试代码。 这是一个圆圈。 我想大多数人都可以想象什么是圆圈类,所以我不会粘贴它。 在测试代​​码中,我尝试使用无效点测试圆形构造函数,并假设抛出exception。 但是发生了一个错误。 我在线检查,但仍然不知道如何解决问题。 有没有人可以帮助我? 谢谢 代码信息,bug在下面代码的最后一句中 /** * Tests that the Circle constructor throws an exception for center Point. */ @Test (expected = IllegalArgumentException.class) public void testIllegalCenter() { //Instantiates a circle with an incorrect center point. @SuppressWarnings(“unused”) final Circle testCircle = new Circle(VALID_RADIUS, INVALID_POINT, VALID_COLOR); } 错误报告 错误:在CircleTest.testIllegalCenter()中将测试存储到testCircle 此指令为局部变量赋值,但不会在任何后续指令中读取或使用该值。 通常,这表示错误,因为从未使用计算的值。 请注意,Sun的javac编译器通常会为最终的局部变量生成死存储。 因为FindBugs是一个基于字节码的工具,所以没有简单的方法来消除这些误报。

在Eclipse中抑制FindBugs警告

我使用字符串作为锁,因此要确保对象是一个新实例。 FindBugs抱怨,因为直接定义字符串通常更有效(使用双引号)。 我的代码看起来像: /** A lock for the list of inputs. */ @edu.umd.cs.findbugs.annotations.SuppressWarnings(“DM_STRING_CTOR”) //We want a new String object here as this is a lock. private final Object inputListLock = new String(“inputListLock”); 我在这里做错了吗? Eclipse FindBugs插件仍然将此报告为一个问题: 模式ID:DM_STRING_CTOR,类型:Dm,类别:PERFORMANCE 使用java.lang.String(String)构造函数会浪费内存,因为这样构造的对象在function上与作为参数传递的String无法区分。 只需直接使用参数String。

Java关闭连接和findbugs

在我们的代码中,我们通常使用以下模式: Connection conn; try{ conn = getConnection(); //Do databasey stuff }catch(Exceptions that get thrown){ }finally{ try{ conn.close(); }catch(SQLException ex){ logger.error(“Failed to cleanup database connection”,ex); } } 然而,findbugs不喜欢这个。 由于conn.close()可以抛出exception,因此无法保证关闭连接。 findbugs是否过于迂腐或是否有更好的方法来关闭数据库连接。 编辑:添加删除尝试捕获关闭。

SuppressWarnings不适用于FindBugs

我在我的Eclipse项目上运行了FindBugs并得到了一个潜在的错误警告我想要因特定原因而压制(在这个问题的上下文之外)。 这是代码: public class LogItem { private String name; private void setName(final String nm) { name = nm; } } 当你在这个类上运行FindBugs时,会给你一个关于name = nm赋值操作的警告,说明: Unread field: com.me.myorg.LogItem.name 。 所以我尝试添加这个: private void setName(final String nm) { @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = “NP”, justification = “Because I can”) name = nm; } 当我这样做时,我在Eclipse中得到一个语法(编译)错误,说明: 重复的局部变量nm; 名称无法解析为某种类型。 然后我尝试在字段本身上添加FindBugs的SuppressWarnings ,但是在类上重新运行FindBugs之后,FindBugs仍然抱怨同一行代码并出于同样的原因。 我甚至尝试将SuppressWarnings添加到setName方法,但仍然没有区别。 如何( 确切地说 !)我使用这个注释来安静FindBugs?!?

是否有任何Checkstyle / PMD / Findbugs规则强制“else if”在同一条线上?

在我们的链接if / else /的项目中,如果我们想要进行以下格式化: if (flag1) { // Do something 1 } else if (flag2) { // Do something 2 } else if (flag3) { // Do something 3 } 并禁止以下一个: if (flag1) { // Do something 1 } else { if (flag2) { // Do something 2 } else { if (flag3) { // […]

FindBugs 2.0漏洞列表排名?

我知道有错误列表 ,但我希望有一个列表,其中包含关于排名(2.0版本中的1到20)或至少关于排名组(关注,令人烦恼,可怕,最可怕)的其他信息。 也许我错过了什么,但FindBugs论坛似乎没有活跃?!

jar305.jar中的注释是否应优先于FindBugs的annotation.jar中的类似注释?

在FindBugs发行版中, annotations.jar 不是 jsr305.jar的子集。 但是,几个注释似乎是重复的(要么完全或非常密切)。 如果我有选择,我应该更喜欢jsr305.jar的注释吗? 请注意,我不仅仅想知道使用jsr305.jar注释会“更好”,因为它们代表了一个标准。 相反,我想知道如果我更喜欢特定注释的jsr305.jar版本,FindBugs工具是否会执行相同(或更好)的分析。 可能是某些jsr305.jar注释应该是首选,但其他人不应该这样。 我正在使用FindBugs 1.3.9,这是本文撰写时的最新版本 。 使用此版本,我看到以下选项(如果有其他选项,请更新此表 ): edu.umd.cs.findbugs.annotations.CheckForNull→javax.annotation.CheckForNull edu.umd.cs.findbugs.annotations.CheckReturnValue→javax.annotation.CheckReturnValue edu.umd.cs.findbugs.annotations.NonNull→javax.annotation.Nonnull(NB大小写) edu.umd.cs.findbugs.annotations.Nullable→javax.annotation.Nullable edu.umd.cs.findbugs.annotations.When→javax.annotation.meta.When 此外,所有JCIP 注释都是重复的: net.jcip.annotations.GuardedBy→javax.annotation.concurrent.GuardedBy net.jcip.annotations.Immutable→javax.annotation.concurrent.Immutable net.jcip.annotations.NotThreadSafe→javax.annotation.concurrent.NotThreadSafe net.jcip.annotations.ThreadSafe→javax.annotation.concurrent.ThreadSafe

FindBugs警告:使用keySet迭代器而不是entrySet迭代器效率低下

请参考以下方法: public Set getCellsInColumn(String columnIndex){ Map cellsMap = getCellsMap(); Set cells = new HashSet(); Set keySet = cellsMap.keySet(); for(String key: keySet){ if(key.startsWith(columnIndex)){ cells.add(cellsMap.get(key)); } } return cells; } FindBugs给出了这个警告信息: “ 低效使用keySet迭代器而不是entrySet迭代器此方法使用从keySet迭代器检索的键访问Map条目的值。在map的entrySet上使用迭代器更有效,以避免Map .get(key)lookup。“

FindBugs错误:从实例方法写入静态字段

我在我的应用程序中有几个区域,我从实例方法操作静态变量的值时得到错误。 “从实例方法写入静态字段” 。 如果我们将multithreading排除在等式之外,即使多个实例写入同一个static变量,这种情况是否会造成任何潜在的问题?

在Serializable Java类中使用Logger的正确方法是什么?

我在一个正在研究的系统中有以下( doctored )类, Findbugs正在生成一个SE_BAD_FIELD警告,我试图理解为什么它会在我按照我认为的方式修复之前说出来。 我感到困惑的原因是因为描述似乎表明我在类中没有使用其他非可序列化的实例字段,但bar.model.Foo也不是可序列化的并且以完全相同的方式使用(就我而言)可以告诉)但Findbugs没有发出任何警告。 import bar.model.Foo; import java.io.File; import java.io.Serializable; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Demo implements Serializable { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final File file; private final List originalFoos; private Integer count; private int primitive = 0; public Demo() { for (Foo foo : originalFoos) { this.logger.debug(…); […]