google / google/google-java-format

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

オープン
#1,101 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る
IntelliJ
主要言語
Java
スター
6.2k
フォーク
937
平均マージ
6分
マージ済み PR(30日)
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 を短くまとめたダイジェスト。