Skip to content

SimplifyBooleanExpression causes NullPointerException because condition is negated #276

@timo-abele

Description

@timo-abele

How are you running OpenRewrite?

I am using the Maven plugin, and my project is a single module project.

<plugin>
    <groupId>org.openrewrite.maven</groupId>
    <artifactId>rewrite-maven-plugin</artifactId>
    <version>5.23.1</version>
    <configuration>
        <activeRecipes>
          <recipe>org.openrewrite.staticanalysis.SimplifyBooleanExpression</recipe>
        </activeRecipes>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.openrewrite.recipe</groupId>
            <artifactId>rewrite-static-analysis</artifactId>
            <version>1.3.1</version>
        </dependency>
    </dependencies>
</plugin>

What is the smallest, simplest way to reproduce the problem?

class A {
    boolean foo(String name) {
        return !(name != null ? !name.equals(System.out.toString()) : false);
    }
}

This is transformed to return name == null ? !name.equals(authority.name) : authority.name != null; if name is null.

What did you expect to see?

no change, or negation of the cases instead of the condition:

class A {
    boolean foo(String name) {
        return name != null ? name.equals(System.out.toString()) : !false;
    }
}

What did you see instead?

class A {
    boolean foo(String name) {
        return name == null ? !name.equals(System.out.toString()) : false;
    }
}

What is the full stack trace of any errors you encountered?

Standard NPE message when name is null

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status
    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions