Tag: findbugs

使用java.util.concurrent.locks.ReadWriteLock进行@GuardedBy批注

什么是用ReadWriteLock保护字段的正确/首选方式,以便像FindBugs这样的工具可以利用注释? ReadWriteLock的名字应该只写在@GuardedBy注释中。 是否有理由在@GuardedBy注释中只写入读锁的名称,或只是写锁? FindBugs或其他工具是否支持@GuardedBy ReadWriteLock ?

清理未使用的Android权限

如果我想研究在Android应用程序中如何使用Mainfest.xml中的权限(在Mainfest.xml中请求),以便删除它们,是否有一种简单的方法呢? lint或findbugs是否提供某种支持追踪项目中使用/滥用的权限?

发现依赖于默认编码

我从FindBugs得到下面的bug, 在MyClass.print(String)中find对默认编码的依赖:String.getBytes() 方法 protected void print (String str) { { private OutputStream outStream = null; ….. outStream.write(str.getBytes()); ……. } 请让我知道是什么错误? 我们如何解决这个问题? 提前致谢

轻松find未初始化的成员variables

我正在寻找一种简单的方法来查找未初始化的类成员variables。 在运行时或编译时查找它们是可以的。 目前我在类的构造函数中有一个断点,并逐个检查成员variables。

如何使用Gradle FindBugs插件生成HTML输出

使用Gradle FindBugs插件 ,我怎样才能以HTML格式生成输出? FindBugsExtension确实有一些configuration要设置。 findbugs { toolVersion = "2.0.1" sourceSets = [sourceSets.main] ignoreFailures = true reportsDir = file("$project.buildDir/findbugsReports") effort = "max" reportLevel = "high" visitors = ["FindSqlInjection", "SwitchFallthrough"] omitVisitors = ["FindNonShortCircuit"] includeFilter = file("$rootProject.projectDir/config/findbugs/includeFilter.xml") excludeFilter = file("$rootProject.projectDir/config/findbugs/excludeFilter.xml") } 但是没有输出属性设置为findbugs anttask。

如何处理Findbugs“在序列化类中的非暂时性不可序列化的实例字段”?

考虑下面的类。 如果我运行findbugs它会给我一个错误(“序列化类中的非瞬时不可序列化的实例字段”)在第5行,但不是第7行。 1 public class TestClass implements Serializable { 2 3 private static final long serialVersionUID = 1905162041950251407L; 4 5 private Set<Integer> mySet; // Findbugs error 6 7 private HashSet<Integer> myOtherSet; 8 9 } 这是正确的,因为java.util.Set从不在其层次结构中实现Serializable,java.util.HashSet也不会。 然而,最好的做法是对接口进行编码而不是具体的实现。 我怎样才能最好地处理这个? 我可以在第3行添加一个@Suppresswarnings(justification =“No bug”,values =“SE_BAD_FIELD”)。我在我的实际代码中有很多设置和列表,我恐怕会乱扔我的代码太多。 有更好的方法吗?

不正确的延迟初始化

Findbug告诉我,我使用不正确的延迟初始化。 public static Object getInstance() { if (instance != null) { return instance; } instance = new Object(); return instance; } 我在这里没有看到任何错误。 是findbug的错误行为,还是我错过了什么?

连接closures时ResultSet没有closures?

我一直在做我们的宠物项目之一的代码审查(主要是使用像FindBugs的工具)和FindBugs标记下面的代码是错误的(伪代码): Connection conn = dataSource.getConnection(); try{ PreparedStatement stmt = conn.prepareStatement(); //initialize the statement stmt.execute(); ResultSet rs = stmt.getResultSet(); //get data }finally{ conn.close(); } 错误是这个代码可能不会释放资源。 我发现ResultSet和Statement没有closures,所以最后closures了它们: finally{ try{ rs.close() }catch(SqlException se){ //log it } try{ stmt.close(); }catch(SqlException se){ //log it } conn.close(); } 但是我在许多项目(来自不less公司)遇到过上述模式,没有人closuresResultSet或Statements。 当Connectionclosures时,您是否遇到ResultSet和Statement没有closures的问题? 我发现只有这一点 ,它指的是甲骨文在closures连接(我们使用Oracle数据库,因此我的更正)closures结果集有问题。 java.sql.api在Connection.close()javadoc中什么都没说。

closures某些代码的声纳

是否有可能closures声纳( www.sonarsource.org )测量特定的代码块,哪一个不想被测量? 一个例子是FindBugs输出的“Preserve Stack Trace”警告。 当离开服务器时,我可能只想把消息传回给客户端,而不包括我刚才捕获的实际exception,如果这个exception对于客户端来说是未知的(因为客户端没有那个JAR例外包含例外)。

Checkstyle与PMD

我们正在将静态分析工具引入到我们的Java产品的构build系统中。 我们正在使用Maven2,所以Checkstyle和PMD整合是免费的。 不过,就强制执行基本样式规则而言,这两个工具在function上有很大的重叠。 利用这两种方法是否有好处? 如果一个人工作,我不想维护2个工具。 如果我们select一个,我们应该使用哪一个,为什么? 我们也计划使用FindBugs。 还有其他静态分析工具,我们应该看看? 更新:共识似乎是PMD比CheckStyle更受欢迎。 我没有看到使用两者的可靠理由,而且我也不想保留2套规则文件,所以我们可能会专门针对PMD。 我们还将引入FindBugs,也许最终还会引入Macker来执行体系结构规则。