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

2021-07-03 11:58:19 +08:00
 git00ll

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 这种效果呢

1955 次点击
所在节点    程序员
3 条回复
git00ll
2021-07-03 12:02:00 +08:00
使用 jd 反编译出来的代码 return 上面一行,是不符合 java 语法的
cweijan
2021-07-03 12:27:11 +08:00
@git00ll 我去手动试了下, return 这段代码并没有什么问题.
paouke
2021-07-03 16:39:22 +08:00
要不,升级下 idea ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/787276

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX