google / google/error-prone

Suggestion: `BadImport` should ignore annotation parameters

Open
#1,651 1 comment 1 reaction 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.