Почему Intellij Idea не правильно строит деломбок - PullRequest
0 голосов
/ 18 февраля 2020

Я борюсь с создателем ломбок в Intellij Idea. Минимальный пример, который показывает проблему, которую я мог создать, это

import java.io.IOException;
import lombok.AllArgsConstructor;
import lombok.Builder;

class Base { }

@Builder
@AllArgsConstructor
class Scratch extends Base {
    String attr;
    String attr2;

    public Scratch(Base b) throws IOException {
        throw new IOException();
    }

    public static void main(String[] args) {
        Scratch.builder().attr("1").attr2("2").build(); // Idea shows an error here
    }
}

Идея показывает ошибку в строке с вызовом build() и жалуется, что Unhandled exception: java.io.IOException. Но код компилируется и запускается из командной строки. Компилятор java в идее и командной строке - это та же версия java 8. Когда я попытался "delombok" код в идее, я вижу, что сгенерированная идея ScratchBuilder.build:

    public Scratch build() throws IOException {
        return new Scratch(attr, attr2);
    }

Странно, в методе сборки есть броски, хотя сгенерированный конструктор всех аргументов ничего не бросает. Если я просто удалю предложение throws из метода build, Идея перестанет жаловаться.

Почему идея считает, что в методе build должны быть броски?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Проблема, описанная в вопросе, является ошибкой в ​​lombok-intellij-plugin. Я сообщил об ошибке в github, и Михаил Плюшников принял сообщение об ошибке и исправил ошибку в lombok-intellij-plugin. Подробнее см. https://github.com/mplushnikov/lombok-intellij-plugin/issues/740

0 голосов
/ 18 февраля 2020

Можете ли вы инициализировать его, а затем назначить для Builder, например так:

Scratch sc = Scratch.builder().attr("1").attr2("2").build();
...