Можно ли в Gradle предотвратить появление предупреждений об устаревании в коде, автоматически создаваемом обработчиком аJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Можно ли в Gradle предотвратить появление предупреждений об устаревании в коде, автоматически создаваемом обработчиком а

Сообщение Anonymous »

У меня есть проект Java, созданный с использованием Gradle и генератора кода MapStruct для генерации кода сопоставления. Я намеренно включил предупреждения об устаревании, так как хочу быть уведомлен, если в конечном итоге вызову устаревший код, например при обновлении версий библиотеки.
У меня есть интерфейс сопоставителя MapStruct (с аннотацией @Mapper), который содержит метод сопоставления. Метод сопоставления и один из используемых им пользовательских методов сопоставления используются функцией, которая будет удалена в следующей основной версии программного обеспечения, но должна остаться в второстепенных версиях, предшествующих этому моменту. Поэтому я пометил эти два метода как @Deprecated, чтобы сообщить, что они удаляются, и не пропустить их удаление при удалении другого устаревшего кода.
Когда я компилирую код, я получаю два предупреждения об устаревании в конкретном классе, автоматически созданном MapStruct для интерфейса преобразователя: одно для реализации устаревшего метода сопоставления, а другое для вызова пользовательского метода сопоставления.
Цель
Я надеюсь найти способ предотвратить появление этих предупреждений об устаревании, сохраняя при этом предупреждения об устаревании для моего собственного (не созданного автоматически) кода.
Если бы я написал код вручную, я бы пометил его @Deprecated, что подавило бы это предупреждение. В качестве альтернативы есть опция @SuppressWarnings("deprecation") для ее подавления. Однако MapStruct в настоящее время не позволяет добавлять аннотации к сгенерированному коду.
Другой вариант, который мне приходит в голову, заключается в том, что, возможно, в Gradle есть способ включить предупреждения об устаревании только для сгенерированных классов (в build/generated/sources/annotationProcessor/java), но не для рукописных классов (в src/main/java). Я не вижу простого способа сделать это. На форуме есть старое сообщение девятилетней давности, в котором обсуждается эта проблема, хотя я не уверен, как применить его к текущему ландшафту Gradle.
Как я могу подавить автоматически создаваемые предупреждения об устаревании класса картографа, не отключая предупреждения об устаревании для моего негенерируемого кода в проекте?
Пример
build.gradle
plugins {
id 'java'
}

repositories {
mavenCentral()
}

dependencies {
annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
implementation 'org.mapstruct:mapstruct:1.4.2.Final'
}

compileJava {
options.deprecation = true
}

Классы Java
public class Source {
private String value;
public String getValue() { return value; }
public void setValue(String value) { this.value = value; }
}

public class Target {
private String value;
public String getValue() { return value; }
public void setValue(String value) { this.value = value; }
}

import org.mapstruct.Mapper;

@Mapper
public interface ExampleMapping {
@Deprecated
Target map(Source source);

@Deprecated
default String mapString(String s) {
return s.toUpperCase();
}
}

Построение вывода
$ ./gradlew build

> Task :compileJava
/path/to/project/build/generated/sources/annotationProcessor/java/main/com/example/ExampleMappingImpl.java:13: warning: [deprecation] map(Source) in ExampleMapping has been deprecated
public Target map(Source source) {
^
/path/to/project/build/generated/sources/annotationProcessor/java/main/com/example/ExampleMappingImpl.java:20: warning: [deprecation] mapString(String) in ExampleMapping has been deprecated
target.setValue( mapString( source.getValue() ) );
^
2 warnings

BUILD SUCCESSFUL in 3s
2 actionable tasks: 2 executed

Сгенерированный код
import javax.annotation.processing.Generated;

@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2021-07-16T22:41:15-0500",
comments = "version: 1.4.2.Final, compiler: IncrementalProcessingEnvironment from gradle-language-java-7.1.1.jar, environment: Java 11.0.9.1 (AdoptOpenJDK)"
)
public class ExampleMappingImpl implements ExampleMapping {

@Override
public Target map(Source source) {
if ( source == null ) {
return null;
}

Target target = new Target();

target.setValue( mapString( source.getValue() ) );

return target;
}
}
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»