V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git00ll
V2EX  ›  程序员

发现一个神奇的现象, idea 无法反编译 catch 块中带 return 的 groovy 代码

  •  
  •   git00ll · 2021-07-03 11:58:19 +08:00 · 1936 次点击
    这是一个创建于 1239 天前的主题,其中的信息可能已经有所发展或是发生改变。

    catch 代码块中含有 return,会导致 idea 反编译不出来

    如果代码是这样的

    @CompileStatic
    class TestGroovy {
    
        void funcA() {
            try {
                def a = 1 + 1
            } catch (e) {
                println e
            }
        }
    }
    

    idea 反编译结果

        public void funcA() {
            try {
                try {
                    int a = 1 + 1;
                } catch (Exception var6) {
                    DefaultGroovyMethods.println(this, var6);
                    Object var10000 = null;
                }
    
            } finally {
                ;
            }
        }
    

    上面没问题,大概能根据反编译的代码看出原始代码。

    如果在 catch 块中添加 return 语句

    @CompileStatic
    class TestGroovy {
    
        void funcA() {
            try {
                def a = 1 + 1
            } catch (e) {
                println e
                return
            }
        }
    }
    
    

    idea 反编译无法反编译

        public void funcA() {
            // $FF: Couldn't be decompiled
        }
    
    

    使用 jd.gui 进行反编译,能正常反编译,而且变量名更友好。

      public void funcA() {
        try {
          int a = 1 + 1;
        } catch (Exception e) {
          DefaultGroovyMethods.println(this, e);
          null;
          return;
        } finally {}
      }
    

    idea 2019.03

    所以如何能让 idea 的反编译达到 jd.gui 这种效果呢

    3 条回复    2021-07-03 16:39:22 +08:00
    git00ll
        1
    git00ll  
    OP
       2021-07-03 12:02:00 +08:00
    使用 jd 反编译出来的代码 return 上面一行,是不符合 java 语法的
    cweijan
        2
    cweijan  
       2021-07-03 12:27:11 +08:00
    @git00ll 我去手动试了下, return 这段代码并没有什么问题.
    paouke
        3
    paouke  
       2021-07-03 16:39:22 +08:00 via iPhone
    要不,升级下 idea ?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2792 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:00 · PVG 21:00 · LAX 05:00 · JFK 08:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.