Java Proguard的哪个优化选项删除if()语句?

Java Proguard的哪个优化选项删除if()语句?,java,optimization,proguard,Java,Optimization,Proguard,实际上,我对ProGuard 4.11有一个问题,它删除了if(a!=null){a.a();}的if语句并保留a.a()我假设ProGuard认为a不能为null,但这是错误的。这将导致NullPointerExceptionif语句是从涉及父构造函数的复杂构造调用的。问题: 在不停用所有优化的情况下,是否可以阻止ProGuard进行此优化? 是否有任何过滤器优化选项 问候。您没有给我们任何代码,让我们看看我的水晶球是否工作正常 if语句是从涉及父构造函数的复杂构造调用的 它可以是这样的: c

实际上,我对ProGuard 4.11有一个问题,它删除了
if(a!=null){a.a();}
if
语句并保留
a.a()

我假设ProGuard认为
a
不能为
null
,但这是错误的。这将导致NullPointerException
if语句是从涉及父构造函数的复杂构造调用的。
问题: 在不停用所有优化的情况下,是否可以阻止ProGuard进行此优化?
是否有任何过滤器优化选项


问候。

您没有给我们任何代码,让我们看看我的水晶球是否工作正常

if语句是从涉及父构造函数的复杂构造调用的

它可以是这样的:

class Base {
    Base {
        m(); // <- problem here
    }

    abstract void m();    
}

class Derived extends Base {
    Derived() {
        this.a = new A();
    }

    void m() {
        a.a();
    }

    private final A a;
}
类基{
基地{

m();//这个问题总是出现在proGuard 5.2中,所以我必须看看是否有修复方法。。 在proGuard的配置文件中,可以通过输入以下内容来停用此优化:

-optimizations "!field/propagation/*"
现在,正如maaartinus所说,这个构造是不可行的,我更愿意通过从相关字段中删除“final”关键字来解决这个问题,这就是我给他正确答案的原因。
如果您没有任何访问源的权限,那么您应该停用字段/传播优化。

Bug report pending:

我想说,您应该避免这种空检查,并更担心为什么传递了
null
值。您能给我们展示一个发生这种情况的示例吗?看起来您应该向ProGuard提交一个Bug,而不是处理此问题。问题是,如果可能停用thi,则更需要知道这是一种优化,不需要停用所有优化。ProGuard问题对我来说只是一个次要问题,因为我可以用版本4.10解决它(目前没有用5.0测试)嘿,你的例子非常接近现实:)我确实有意省略了代码,因为我不想在Stackoverflow中发布ProGuard的错误问题。例如,我可以使用ProGuard 4.10解决这个问题。我只是想知道是否可以停用这种优化,而不需要停用所有优化谢谢你的回复,问候。