findbugs自定义规则怎么确定for循环的边界

问题描述

findbugs自定义规则怎么确定for循环的边界

我主要是要检测for循环里面是否进行了数据交换,但是不知道该怎么确定for循环的边界。
package edu.umd.cs.findbugs.detect;

import edu.umd.cs.findbugs.BugInstance;
import edu.umd.cs.findbugs.BugReporter;
import edu.umd.cs.findbugs.bcel.OpcodeStackDetector;
import org.apache.bcel.classfile.Code;

public class ForNotHasDataExchange extends OpcodeStackDetector {
public BugReporter bugReporter;
public int logBlockStart = -1;
public int logBlockEnd = -1;
public int forPC = -1;
public int astorePC = -1;
public int gotoPC = -2;

public ForNotHasDataExchange(BugReporter bugReporter) {
    this.bugReporter = bugReporter;
}

public void visit(Code obj) {
    this.forPC = -1;
    this.logBlockStart = -1;
    this.logBlockEnd = -1;
    this.astorePC = -1;
    this.gotoPC = -2;
    super.visit(obj);
}

public void sawOpcode(int seen) {
    switch (seen) {
    case ASTORE_0 :
        this.astorePC = getPC();
        break;
    case ASTORE_1 :
        this.astorePC = getPC();
        break;
    case ASTORE_2 :
        this.astorePC = getPC();
        break;
    case ASTORE_3 :
        this.astorePC = getPC();
        break;
    case ASTORE:
        this.astorePC = getPC();
    }

    if (seen == GOTO) {
        this.gotoPC = getPC();

        if ((this.astorePC != -1) && (this.astorePC + 1 != this.gotoPC)) {
            this.forPC = getPC();
            this.logBlockStart = getBranchFallThrough();
            this.logBlockEnd = getBranchTarget();
            return;
        }
    }
    if (seen == INVOKEVIRTUAL) {
        String classConstant = getClassConstantOperand();
        String nameConstant = getNameConstantOperand();
        String sigConstant = getSigConstantOperand();

        if ((((!"getSession".equals(nameConstant)) || (!"()Lorg/hibernate/Session;"
                .equals(sigConstant))))
                && (((!"getJdbcTemplate".equals(nameConstant)) || (!"()Lorg/springframework/jdbc/core/JdbcTemplate;"
                        .equals(sigConstant))))
                && (((!"getConnection".equals(nameConstant)) || (!"()Ljava/sql/Connection;"
                        .equals(sigConstant))))) {
            return;
        }
        if ((getPC() >= this.logBlockStart)
                && (getPC() <= this.logBlockEnd)
                && (this.logBlockStart != -1) && (this.logBlockEnd != -1)) {
            BugInstance bug = new BugInstance(this, "CHECK_DATA_EXCHANGE",
                    HIGH_PRIORITY).addClassAndMethod(this).addSourceLine(this, getPC());
            bug.addInt(getPC());
            this.bugReporter.reportBug(bug);
            return;
        }
        return;
    }
}

}


目前做到这种程度了,但是不准确,也会确定到else和switch里面

解决方案

http://blog.csdn.net/jdsjlzx/article/details/21472253
http://www.cnblogs.com/musicmovie/p/3682729.html

时间: 2024-10-06 10:17:24

findbugs自定义规则怎么确定for循环的边界的相关文章

java编程排序之内置引用类型的排序规则实现,和自定义规则实现+冒泡排序运用

第一种排序:[冒泡排序]基本数据类型的排序. [1]最简易的冒泡排序.效率低.因为比较的次数和趟数最多. 1 /** 2 * 最原始的冒泡排序. 3 * 效率低. 4 * 因为趟数和次数最多.都是按最大化的循环次数进行循环 5 * @Title: sort 6 * @Description: TODO(这里用一句话描述这个方法的作用) 7 * @param arr 8 * @return void 返回类型 9 * @author 尚晓飞 10 * @date 2014-8-5 上午8:42:4

静态分析-请问有大神知道如何自定义规则对代码进行静态检查么?

问题描述 请问有大神知道如何自定义规则对代码进行静态检查么? 请问有大神知道如何自定义规则对代码进行静态检查么?一直想根据自己的编程规则集,指定适合自身的分析工具. 解决方案 不知道你说的是什么的静态检查,代码分析工具么?

图片-安卓做自定义圆形头像时如何限制移动边界

问题描述 安卓做自定义圆形头像时如何限制移动边界 在制作自定义圆形头像时如何像qq设置圆形头像一样可以让图片不移出圆形区域? 我尝试的判断图片左上角坐标和右下角坐标有没有在圆形区域内方法图片都会不停的 闪,这种方法不太好,有什么推荐的方法,求助- 解决方案 http://www.cnblogs.com/dyllove98/p/4203349.html 解决方案二: 你可以阅读一下别人写的源码,看他是怎么做的,然后慢慢变成自己的东西.https://github.com/hdodenhof/Cir

一个UrlRewrite自定义规则

都是在web.config里配置访问规则在路由到实际页面,所以先实现自定义节点信息读取,这里我定义了俩个类,贴出详细信息 show sourceview sourceprint? namespace UrlRewrite {     public class UrlRewriteConfigGroup : ConfigurationSectionGroup     {         [ConfigurationProperty("rules")]         public Url

自定义的datatable,通过循环绑定gridview,但数据显示不在同一行,如何解决?

问题描述 这是绑定的代码DimdtAsDataTable=NewDataTable'DimsssAsString="sql"dt.Columns.Add("grdColumn1")dt.Columns.Add("grdColumn2")dt.Columns.Add("grdColumn3")Fori=1To5DimdrAsDataRow=dt.NewRow()dr.Item("grdColumn1")=&q

treeview xml iframe-treeview读取xml做导航菜单不能跳转到mainframe框架中去

问题描述 treeview读取xml做导航菜单不能跳转到mainframe框架中去 index.aspx页 tree.aspx页 /asp:TreeView tree.aspx.cs protected void Page_Load(object sender, EventArgs e) { string path = @"e:s2tree.xml"; if (!IsPostBack) { InitialTreeView(this.TreeView1.Nodes, path); } }

自定义 Lint 规则简介

上个月,笔者在巴黎 Droidcon 的 BarCamp 研讨会上聆听了 Matthew Compton 关于编写自己的 Lint 规则的讲话.深受启发之后,笔者想就此话题做进一步的探索. 定义 如果你是安卓开发者,那你一定已经知道 Lint 的定义. Lint 是一款静态代码分析工具,能检查安卓项目的源文件,从而查找潜在的程序错误以及优化提升的方案. 当你忘记在Toast上调用show()时,Lint 就会提醒你.它也会确保你的ImageView中添加了contentDescription,以

静态代码检查工具 FindBugs

使用 FindBugs的原因和方法   静态分析工具承诺无需开发人员费劲就能找出代码中已有的缺陷.当然,如果有多年的编写经验,就会知道这些承诺并不是一定能兑现.尽管如此,好的静态分析工具仍然是工具箱中的无价之宝.在这个由两部分组成的系列文章的第一部分中,高级软件工程师 Chris Grindstaff 分析了 FindBugs如何帮助提高代码质量以及排除隐含的缺陷. 代码质量工具的一个问题是它们容易为开发人员提供大量但并非真正问题的问题--即伪问题(false positives).出现伪问题时

网络防火 轻松玩转天网防火墙IP规则

现在的互联网并非一片净土,为了防范来自网络的攻击,很多初学的朋友也安装了防火墙软件来保护自己,可是如何用防火墙更加实用呢?下面,就跟随笔者一块,以天网防火墙为例,通过它支持自定义规则的功能,满足不同类型用户的需求,避免"防住了别人也阻止了自己"的尴尬. 小知识:IP规则是一系列的比较条件和一个对数据包的动作组合,它能根据数据包的每一个部分来与设置的条件进行比较.当符合条件时,就可以确定对该包放行或者阻挡.通过合理的设置规则可以把有害的数据包挡在你的机器之外,也可为某些有合法网络请求的程