Suggestion: `BadImport` should ignore annotation parameters
- Dominant language
- Java
- Stars
- 7.2k
- Forks
- 820
- Avg merge
- 5h 9m
- Merged PRs (30d)
- 50
Description
Consider the following code:
```java
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
@JsonTypeInfo(use = Id.NAME)
@JsonSubTypes({
@Type(value = VariantA.class, name = "variant_a"),
@Type(value = VariantB.class, name = "variant_b")
})
interface Dummy {}
final class VariantA implements Dummy {}
final class VariantB implements Dummy {}
```
Applying the `BadImport` check to this code:
```sh
wget \
https://repo1.maven.org/maven2/com/google/errorprone/error_prone_core/2.4.0/error_prone_core-2.4.0-with-dependencies.jar
wget \
https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.11.0/jackson-annotations-2.11.0.jar
javac \
-XDcompilePolicy=simple \
-processorpath error_prone_core-2.4.0-with-dependencies.jar \
'-Xplugin:ErrorProne -XepPatchChecks:BadImport -XepPatchLocation:/tmp' \
-cp jackson-annotations-2.11.0.jar \
Dummy.java
```
This yields:
```diff
--- /tmp/Dummy.java
+++ /tmp/Dummy.java
@@ -1,11 +1,9 @@
import com.fasterxml.jackson.annotation.JsonSubTypes;
-import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
-import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
-@JsonTypeInfo(use = Id.NAME)
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
@JsonSubTypes({
- @Type(value = VariantA.class, name = "variant_a"),
- @Type(value = VariantB.class, name = "variant_b")
+ @JsonSubTypes.Type(value = VariantA.class, name = "variant_a"),
+ @JsonSubTypes.Type(value = VariantB.class, name = "variant_b")
})
interface Dummy {}
```
In this case the [`@JsonTypeInfo`](https://github.com/FasterXML/jackson-annotations/blob/jackson-annotations-2.11.0/src/main/java/com/fasterxml/jackson/annotation/JsonTypeInfo.java) and [`@JsonSubTypes`](https://github.com/FasterXML/jackson-annotations/blob/jackson-annotations-2.11.0/src/main/java/com/fasterxml/jackson/annotation/JsonSubTypes.java) annotations have elements that reference nested types with generic names. In the case of `@JsonTypeInfo` this is an enum (`Id`), while in the case of `@JsonSubTypes` it is another annotation type (`@Type`).
Since annotations can only reference primitive types, strings, enums or other annotations, no ambiguity arises in this case. As such it seems to me that `BadImport` should not flag these cases; the suggested changes make the code more verbose without improving readability.
Contributor guide
Assessment
This issue has not been assessed yet.