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

Vim脚本,用于插入链接方法调用的Java空引用检查,java,vim,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) {

我想编写一个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?

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

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

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

    //在特殊情况下,请确保校准foo.bar().foobar() 公共富吧(){ //做工作。。。 }

变成

// 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...
}

相反,使用一个静态分析工具(或多于1个),比如FindBugs,这确实是一个问题。

我肯定不想维护该代码,即使您能够在Vim中轻松生成它。祝你好运。你认为用Java有更好的方法吗?除了愚蠢的变量名之外,让对象抛出异常而不是返回NULL。然后将整个调用链包装在try{}catch{}中,因为您使用了太多可能返回null的方法;这些是谁设计的?在非常高质量的Java代码中,null会出现,但并不经常出现。