Tag: 静态分析

有没有办法让eclipse报告一般的“catch(exceptione)”作为错误/警告(在java中)?

我试图鼓励在Java代码中不捕获一般exception的最佳实践。 例如: try { … } catch (Exception e) { // bad! … } 有没有办法在Eclipse中将此标记为错误/警告? 我知道PMD会选择这个,但我宁愿避免将它集成到每个人的构建环境中。

是否有一个很好的Eclipse插件来检查@Nonnull和@Nullable注释?

在Eclipse中检查@Nonnull和@Nullable注释是一个早期测试版 。 最大的问题是它不知道Java API的null行为。 还有其他目前更好的插件吗?

FindBugs 2.0漏洞列表排名?

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

NPE注释场景和Java静态分析工具

以下是一些可以抛出NullPointerException的代码片段。 01: public void m1(@Nullable String text) { System.out.print(text.toLowerCase()); // <– expect to be reported. } 02: private boolean _closed = false; public void m1(@Nullable String text) { if(_closed) return; System.out.print(text.toLowerCase()); // <– expect to be reported. } 03: public void m1(@NotNull String text) { System.out.print(text.toLowerCase()); } public @Nullable String getText() { return “Some text”; […]

找出一种方法是否可以调用另一种方法

我试图找出如何获取Java pojo,并分析其方法可以调用所有其他方法和函数。 例如,这是输出的硬编码示例。 我该怎么做这个一般? 我需要以编程方式分析Java对象,以确定执行时可以调用的方法。 例: package com.example.analyze; public class Main { private static class Foo { public void foo(int value, Bar bar) { if(value > 5) bar.gaz(); } } private static class Bar { public void gaz() { System.out.println(“gaz”); } } private static class Analyzer { public void analyze(Object object){ System.out.println(“Object method foo could […]

Java编码风格

你如何保持自己的标准编码? 有C#的stylecop和resharper 。 Java中的代码分析是否有任何工具/ eclipse插件? 你使用哪一个?

为什么此代码会生成“潜在资源泄漏”警告?

Eclipse(Juno)发出以下警告: 潜在的资源泄漏:’os’可能不会被关闭 在此代码中try主体的第一行: static void saveDetails(byte[] detailsData) { OutputStream os = null; try { os = sContext.openFileOutput(DETAILS_FILE_NAME, Context.MODE_PRIVATE); os.write(detailsData); } catch (IOException e) { Log.w(LOG_TAG, “Unable to save details”, e); } finally { if (os != null) { try { os.close(); } catch (IOException ignored) { } } } } 声明openFileOutput方法抛出FileNotFoundException 。 这是假阳性吗? 这似乎是一个相当普通的执行路径分析。

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

如何在Java中找到未关闭的I / O资源?

Java中的许多I / O资源(如InputStream和OutputStream)在完成时需要关闭,如此处所述。 如何搜索我的项目中没有关闭此类资源的地方,例如这种错误: private void readFile(File file) throws IOException { InputStream in = new FileInputStream(file); int nextByte = in.read(); while (nextByte != -1) { // Do something with the byte here // … // Read the next byte nextByte = in.read(); } // Oops! Not closing the InputStream } 我尝试过一些静态分析工具,如PMD和FindBugs,但是他们没有将上面的代码标记为错误。

Java最小化依赖关系

我有一种情况,其中有一小段Java代码,它依赖于大量的jar。 但是,这些jar中的依赖关系非常浅。 在大多数情况下,它仅依赖于单个界面的jar。 我不想将所有jar分发给应用程序,而是将特定的类文件分发到它实际使用的jar中。 这样做的原因是为了节省空间(此代码将存在于applet中)。 有谁知道自动执行此操作的工具或方法? 假设所有依赖项都是静态的,这似乎完全有可能。 有任何想法吗?