用于为链式方法调用插入Java空引用检查的Vim脚本

时间:2010-02-12 23:37:41

标签: java vim

我想编写一个vim脚本来执行以下操作:

如果我的Java代码中有以下内容,

Z z = obj1.foo().bar().foo1().bar1()

应该替换为

if(obj1 != null) {  
  T1 o1 = obj1.foo();  
  if(o1 != null) {  
    T2 o2 = o1.bar();  
    if(o2!=null) {  
      T3 o3 = o2.foo1();  
      if(o3 != null) {  
         z = o3.bar1();  
      }  
      else   
         z = null;  
    }  
    else   
         z = null;  
  }  
  else  
     z = null;  
}  
else   
  z = null  

我想编写一个vi命令,它将一个以逗号分隔的类型T1,T2 ......列表作为参数,以便给我这个大事。

我如何了解vimscripting?

1 个答案:

答案 0 :(得分:2)

与那些对您的问题发表评论的人一样,我相信有更好的方法可以解决您的问题。

以下是我对您的想法的担忧:

  • 那段代码不太可读;它将使将来调试或增强代码变得更加困难和费力,
  • 即使在无法使用空引用的情况下,您的方法也会进行调整
  • 您的代码中可能存在返回null不合适的情况;其中一些可能已经以更好的方式处理
  • 我怀疑像这样的脚本实际上会引入错误或编译时错误;这是我头顶的一个例子

    //在特殊情况下,请务必使用cal foo.bar()。foobar() public Foo bar(){   // 做工作... }

...变为

// Be sure to cal if(foo != null) {
  Bar bar = foo.bar();
  if (bar != null) {
    Foobar foobar = bar.foobar();
    in special cases
  }
}
public Foo bar() {
  // do work...
}

相反,使用像FindBugs这样的静态分析工具(或多于1个),它实际上是good at catching likely null pointer de-references