forked from quarkiverse/quarkus-github-app
-
Notifications
You must be signed in to change notification settings - Fork 1
/
HideAirlineInjectAnnotationsTransformer.java
71 lines (53 loc) · 2.51 KB
/
HideAirlineInjectAnnotationsTransformer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package io.quarkiverse.githubapp.command.airline.deployment;
import static io.quarkiverse.githubapp.command.airline.deployment.GitHubAppCommandAirlineDotNames.ARGUMENTS;
import static io.quarkiverse.githubapp.command.airline.deployment.GitHubAppCommandAirlineDotNames.COMMAND_GROUP_METADATA;
import static io.quarkiverse.githubapp.command.airline.deployment.GitHubAppCommandAirlineDotNames.COMMAND_METADATA;
import static io.quarkiverse.githubapp.command.airline.deployment.GitHubAppCommandAirlineDotNames.GLOBAL_METADATA;
import static io.quarkiverse.githubapp.command.airline.deployment.GitHubAppCommandAirlineDotNames.OPTION;
import java.util.Set;
import org.jboss.jandex.AnnotationTarget.Kind;
import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.DotName;
import org.jboss.jandex.FieldInfo;
import org.jboss.jandex.IndexView;
import org.jboss.jandex.Type;
import io.quarkus.arc.processor.AnnotationsTransformer;
import io.quarkus.arc.processor.DotNames;
public class HideAirlineInjectAnnotationsTransformer implements AnnotationsTransformer {
private final IndexView index;
HideAirlineInjectAnnotationsTransformer(IndexView index) {
this.index = index;
}
@Override
public boolean appliesTo(Kind kind) {
return Kind.FIELD == kind;
}
@Override
public void transform(TransformationContext transformationContext) {
FieldInfo fieldInfo = transformationContext.getTarget().asField();
if (!fieldInfo.hasAnnotation(DotNames.INJECT)) {
return;
}
if (!fieldInfo.hasAnnotation(ARGUMENTS) &&
!fieldInfo.hasAnnotation(OPTION) &&
!GLOBAL_METADATA.equals(fieldInfo.type().name()) &&
!COMMAND_GROUP_METADATA.equals(fieldInfo.type().name()) &&
!COMMAND_METADATA.equals(fieldInfo.type().name()) &&
!isComposition(fieldInfo)) {
return;
}
transformationContext.transform().remove(ai -> DotNames.INJECT.equals(ai.name())).done();
}
private boolean isComposition(FieldInfo fieldInfo) {
Type fieldType = fieldInfo.type();
if (fieldType.kind() != Type.Kind.CLASS) {
return false;
}
ClassInfo fieldClass = index.getClassByName(fieldType.asClassType().name());
if (fieldClass == null) {
return false;
}
Set<DotName> fieldClassAnnotations = fieldClass.annotations().keySet();
return fieldClassAnnotations.contains(ARGUMENTS) || fieldClassAnnotations.contains(OPTION);
}
}