google / google/google-java-format

Intellij Plugin breaks method inlining and variable extraction from inside if condition

未关闭
#1,101 3 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
IntelliJ
主要语言
Java
星标
6.2k
派生
937
平均合并
6 分钟
30 天内合并 PR
3

描述

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:
![error notification](https://github.com/google/google-java-format/assets/6871742/0831ae81-6bd5-4fb7-a3d2-d9537eaa589e)
(I did not try to reproduce this with an MRE, I guess it is a side effect of the first issue)

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。