google / google/google-java-format
Intellij Plugin breaks method inlining and variable extraction from inside if condition
- Dominant language
- Java
- Stars
- 6.2k
- Forks
- 937
- Avg merge
- 6m
- Merged PRs (30d)
- 3
Description
Consider the following code and try inlining `isEmpty2`:
```java
import java.util.Collection;
import java.util.List;
public class InliningWithJavaFormat {
static boolean isEmpty(Collection c) {
return c == null || c.isEmpty();
}
static boolean isEmpty2(Collection c) {
return isEmpty(c);
}
public static void main(String[] args){
var pojo = new MyPojo();
if (pojo != null && !isEmpty2(pojo.getCollection())) {
System.out.println("empty");
}
}
static class MyPojo {
Collection getCollection() {
return List.of();
}
}
}
```
Not only does it fail (without reporting it), but it adds an additional `if (true)`:
```java
public static void main(String[] args){
var pojo = new MyPojo();
if (pojo != null && !isEmpty2(pojo.getCollection())) {
if (true) {
System.out.println("empty");
}
}
}
```
with the plugin disabled, it works:
```java
public static void main(String[] args){
var pojo = new MyPojo();
if (pojo != null) {
Collection c = pojo.getCollection();
if (!isEmpty(c)) {
System.out.println("empty");
}
}
}
```
(not the ideal result but at least it does not fail)
In addition, when I do that on my actual project I get an error notification from the plugin and the formatting gets broken:

(I did not try to reproduce this with an MRE, I guess it is a side effect of the first issue)
Contributor guide
Assessment
This issue has not been assessed yet.