org.openrewrite.java.search.FindRepeatableAnnotations
Java 8 introduced the concept of @Repeatable
annotations.
GitHub, Issue Tracker, Maven Central
- groupId: org.openrewrite
- artifactId: rewrite-java
- version: 8.1.3
{% tabs %} {% tab title="Test.java" %}
{% code title="Test.java" %}
import org.mapstruct.*;
class Test {
@ValueMappings({
@ValueMapping(source = "UNKNOWN", target = MappingConstants.NULL),
@ValueMapping(source = "UNRECOGNIZED", target = MappingConstants.NULL)
})
void test() {
}
}
{% endcode %}
{% code title="Test.java" %}
import org.mapstruct.*;
class Test {
@ValueMappings({
/*~~>*/@ValueMapping(source = "UNKNOWN", target = MappingConstants.NULL),
/*~~>*/@ValueMapping(source = "UNRECOGNIZED", target = MappingConstants.NULL)
})
void test() {
}
}
{% endcode %}
{% endtab %} {% tab title="Diff" %} {% code %}
--- Test.java
+++ Test.java
@@ -4,2 +4,2 @@
class Test {
@ValueMappings({
- @ValueMapping(source = "UNKNOWN", target = MappingConstants.NULL),
- @ValueMapping(source = "UNRECOGNIZED", target = MappingConstants.NULL)
+ /*~~>*/@ValueMapping(source = "UNKNOWN", target = MappingConstants.NULL),
+ /*~~>*/@ValueMapping(source = "UNRECOGNIZED", target = MappingConstants.NULL)
})
{% endcode %} {% endtab %} {% endtabs %}
{% code title="org/mapstruct/ValueMapping.java" %}
package org.mapstruct;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Repeatable(ValueMappings.class)
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.METHOD)
public @interface ValueMapping {
String source();
String target();
}
{% endcode %}
{% code title="org/mapstruct/ValueMappings.java" %}
package org.mapstruct;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.CLASS)
public @interface ValueMappings {
ValueMapping[] value();
}
{% endcode %}
This recipe has no required configuration parameters and comes from a rewrite core library. It can be activated directly without adding any dependencies. {% tabs %} {% tab title="Gradle" %} {% code title="build.gradle" %}
plugins {
id("org.openrewrite.rewrite") version("6.1.4")
}
rewrite {
activeRecipe("org.openrewrite.java.search.FindRepeatableAnnotations")
}
repositories {
mavenCentral()
}
{% endcode %} {% endtab %} {% tab title="Maven POM" %} {% code title="pom.xml" %}
<project>
<build>
<plugins>
<plugin>
<groupId>org.openrewrite.maven</groupId>
<artifactId>rewrite-maven-plugin</artifactId>
<version>5.2.4</version>
<configuration>
<activeRecipes>
<recipe>org.openrewrite.java.search.FindRepeatableAnnotations</recipe>
</activeRecipes>
</configuration>
</plugin>
</plugins>
</build>
</project>
{% endcode %} {% endtab %}
{% tab title="Maven Command Line" %} You will need to have Maven installed on your machine before you can run the following command. {% code title="shell" %}
mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.activeRecipes=org.openrewrite.java.search.FindRepeatableAnnotations
{% endcode %} {% endtab %} {% endtabs %}
The community edition of the Moderne platform enables you to easily run recipes across thousands of open-source repositories.
Please contact Moderne for more information about safely running the recipes on your own codebase in a private SaaS.