Я работаю над базой кода Java в IJ и в настоящее время собираюсь с Maven.Я хотел бы дополнить некоторые части кода контрактами , которые будут получены в сборке Maven .До сих пор мне не удавалось в поисках такой возможности с полки:
- OpenJML , но, похоже, требуется собственный инструмент для анализа вашего кода, и яне удалось найти способ легко интегрировать его в сборку.
- Jetbrains Contracts .Они вызовут предупреждение в IntelliJ посредством проверки, но они не влияют на сборку.
Примечание: Меня интересуют только проверяемые во время компиляции контракты здесь.У меня есть JUnit, чтобы бросить на стороне выполнения вещей.
Контракты для Enforce:
Я добавил этот раздел, чтобы ответить на комментарий, спрашивая, какие контракты яхотел бы обеспечить соблюдение.В идеале я хотел бы, чтобы наиболее мощное решение, которое возможно при условии, что это решение complete .Когда я говорю здесь «завершить», я имею в виду язык контрактов и средство проверки контракта, так что каждое утверждение на этом языке может быть проверено проверяющим как хорошее / плохое во время компиляции.Я знаю, что это может быть большой проблемой, но я был бы рад даже самым простым контрактам, например , предлагаемым Jetbrains .
Для конкретного примера рассмотрим следующую функцию:
public static Long safeToLong(String value) {
if (value == null) {
return null;
}
try {
return Long.parseLong(value);
} catch (NumberFormatException e) {
return null;
}
}
Это успешно передает контракт Jetbrains:
@Contract("null -> null")
И терпит неудачу в этом искусственном контракте:
@Contract("null -> !null")
Но с вышеупомянутым, надуманным, плохим контрактом,сборка Maven все еще работает просто отлично.Сборка не собирает результаты проверки - они видны только внутри IJ.Я хотел бы иметь возможность подключиться к сборке и потерпеть неудачу, если какие-либо контракты будут нарушены.