我现在使用静态代码分析对一个包含超过100.000行Java代码的项目进行了一段时间.我从Findbugs开始,它在开始时给了我大约1500个问题.随着时间的推移我修复了最严重的问题并开始使用其他工具,如PMD,Lint4J,JNorm和现在的Enerjy.
随着更严重的问题得到解决,存在大量低严重性问题.你如何处理这些低优先级的问题?
如果你忽略或禁用规则,你会记录这些规则吗?你的经理们对"留下几千个低优先级问题没有修复"有什么看法?您是否在代码中使用(多个)工具特定注释,或者有更好的方法吗?
我正在阅读关于新的Android Lint规则,并且我发现要防止透支我应该使我的背景布局使用具有空背景的主题,以防止如果我只是要覆盖它来绘制背景.问题是,如何定义具有空背景的自定义主题?
失败尝试1(不编译):
<style name="NoTitleBarNoBackground" parent="@android:style/Theme.NoTitleBar">
<item name="android:background">null</item>
</style>
Run Code Online (Sandbox Code Playgroud)
失败尝试2(警告仍然存在):
<style name="NoTitleBarNoBackground" parent="@android:style/Theme.NoTitleBar">
<item name="android:background">#00000000</item>
</style>
Run Code Online (Sandbox Code Playgroud) 我是android的新手,我正在开发一个Android应用程序.但是我的包行在MainActivity.java类中给出了这个错误.有谁能告诉我这个的原因?这是我的类,包行给出了这个错误.
package com.example.eventgyaam;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
int counter;
Button add,sub;
TextView display;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
counter = 0;
add = (Button) findViewById(R.id.bAdd);
sub = (Button) findViewById(R.id.bSub);
display = (Button) findViewById(R.id.tvDisplay);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
counter++;
display.setText("Your total is "+counter);
}
});
sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
counter--;
display.setText("Your total is "+counter);
}
}); …Run Code Online (Sandbox Code Playgroud) 我很喜欢ADT rev 17的新Lint API检查,但新的API正确性检查让我感到难过.我有以下代码行:
listView.setOverScrollMode(OVER_SCROLL_NEVER);
Run Code Online (Sandbox Code Playgroud)
Lint报道了这一行:
呼叫需要API级别9(当前最小值为4)
根据文档,我应该能够在行上方添加注释,如下所示:
@TargetApi(9)
listView.setOverScrollMode(OVER_SCROLL_NEVER);
Run Code Online (Sandbox Code Playgroud)
但是,这会在Java 1.6中出现语法错误:
令牌上的语法错误,错放的构造(s)
如何懒惰地创建流?在迁移基于集合的代码期间,我多次遇到此模式:
Collection collection = veryExpensiveCollectionCreation();
return Stream.concat(firstStream, collection.stream());
Run Code Online (Sandbox Code Playgroud)
正如我们所知,所得到的连接流通常是懒洋洋地处理的.因此,如果流处理在级联流的第一部分中停止,则根本不需要昂贵的集合.
因此,出于性能原因,我想推迟整个集合的创建,直到连接流实际上尝试迭代连接的第二部分的元素.
伪代码看起来像
return Stream.concat(firstStream, new LazyStreamProvider() {
Stream<Something> createStream() {
return veryExpensiveCollectionCreation().stream();
}
);
Run Code Online (Sandbox Code Playgroud)
编辑:我知道将集合创建重构为流是最好的,以使所有API流都能识别.但是,在这种情况下,这是另一个具有不可修改API的组件的一部分.
如果我跑"lint".在项目目录中我得到了预期的警告,但如果我从eclipse中运行它,我会得到无意义的错误和警告,例如:
编辑:如果我创建一个新工作区并导入现有项目,我会得到正确的错误
我已经使用过Google CodePro AnalytiX,但我从未使用过Findbugs.
我对Findbugs的第一印象是配置起来比较困难.在那之后,我相信两者都是相似的.
你怎么看?
还有一个问题是:这些插件都没有将我们的代码发送到服务器,对吧?(例如,如果我们使用CodePro,我们的代码不会发送到Google服务器).
我在Eclipse Luna中使用antlr4ide插件.每次我保存ANTLR4语法文件时,Eclipse都会显示一个对话框"资源当前在另一个编辑器中编辑.你要继续吗?" 有关如何解决它的任何提示?

如何在Jenkins中显示Android Lint的结果,例如警告?我想浏览Jenkins GUI中的警告,就像编译器警告和PMD/Checkstyle警告一样.
Jenkins作业的输出是这样的:
[exec]
[exec] Scanning org.digitalcure.ccnf.app: ..........Incorrect detector reported disabled issue TooManyViews
[exec] Incorrect detector reported disabled issue TooManyViews
[exec] ...
[exec]
[exec] Scanning org.digitalcure.android.common: ...
[exec] res/values/strings.xml: Warning: The resource R.string.display_unit_abc appears to be unused [UnusedResources]
[exec] res/values/strings.xml: Warning: The resource R.string.edit_error_abc appears to be unused [UnusedResources]
[exec] Warning: Missing density variation folders in res: drawable-xhdpi [IconMissingDensityFolder]
[exec]
[exec] 0 errors, 3 warnings
Run Code Online (Sandbox Code Playgroud)
Android Lint也可以创建XML文件,但我担心没有Jenkins插件可以解析文件.或者我错过了什么?
对于二进制文件,gerrit只在diff中显示一些非常短的元信息.对于图像文件,我真的想在视觉上比较旧版本和新版本.这可能以某种方式(直接与gerrit)?