Skip to content

Commit a40b0ae

Browse files
authored
Merge pull request #27 from Tijs-2/tags
Added the @tag and @tags functionality.
2 parents 34cb135 + fb62b45 commit a40b0ae

File tree

4 files changed

+68
-1
lines changed

4 files changed

+68
-1
lines changed

src/main/java/io/dinject/javalin/generator/MethodReader.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@
1010
import io.dinject.controller.Put;
1111
import io.dinject.javalin.generator.javadoc.Javadoc;
1212
import io.dinject.javalin.generator.openapi.MethodDocBuilder;
13+
import io.swagger.v3.oas.annotations.tags.Tag;
14+
import io.swagger.v3.oas.annotations.tags.Tags;
1315

16+
import javax.lang.model.element.Element;
1417
import javax.lang.model.element.ExecutableElement;
1518
import javax.lang.model.element.VariableElement;
1619
import javax.lang.model.type.ExecutableType;
@@ -91,6 +94,26 @@ public <A extends Annotation> A findAnnotation(Class<A> type) {
9194
return bean.findMethodAnnotation(type, element);
9295
}
9396

97+
private List<String> addTagsToList(Element element, List<String> list){
98+
if(element == null)
99+
return list;
100+
101+
if (element.getAnnotation(Tag.class) != null) {
102+
list.add(element.getAnnotation(Tag.class).name());
103+
}
104+
if (element.getAnnotation(Tags.class) != null) {
105+
for(Tag tag: element.getAnnotation(Tags.class).value())
106+
list.add(tag.name());
107+
}
108+
return list;
109+
}
110+
111+
public List<String> getTags(){
112+
List<String> tags = new ArrayList<>();
113+
tags = addTagsToList(element, tags);
114+
return addTagsToList(element.getEnclosingElement(), tags);
115+
}
116+
94117
void read() {
95118
if (!methodRoles.isEmpty()) {
96119
bean.addStaticImportType(ctx.isJavalin3() ? JAVALIN3_ROLES : JAVALIN2_ROLES);

src/main/java/io/dinject/javalin/generator/Processor.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import io.dinject.controller.Controller;
44
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
5+
import io.swagger.v3.oas.annotations.tags.Tag;
6+
import io.swagger.v3.oas.annotations.tags.Tags;
57

68
import javax.annotation.processing.AbstractProcessor;
79
import javax.annotation.processing.ProcessingEnvironment;
@@ -41,6 +43,7 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
4143

4244
if (ctx.isOpenApiAvailable()) {
4345
readOpenApiDefinition(round);
46+
readTagDefinitions(round);
4447
}
4548

4649
Set<? extends Element> controllers = round.getElementsAnnotatedWith(Controller.class);
@@ -55,13 +58,24 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
5558
}
5659

5760
private void readOpenApiDefinition(RoundEnvironment round) {
58-
5961
Set<? extends Element> elements = round.getElementsAnnotatedWith(OpenAPIDefinition.class);
6062
for (Element element : elements) {
6163
ctx.doc().readApiDefinition(element);
6264
}
6365
}
6466

67+
private void readTagDefinitions(RoundEnvironment round) {
68+
Set<? extends Element> elements = round.getElementsAnnotatedWith(Tag.class);
69+
for (Element element : elements) {
70+
ctx.doc().addTagDefinition(element);
71+
}
72+
73+
elements = round.getElementsAnnotatedWith(Tags.class);
74+
for (Element element : elements) {
75+
ctx.doc().addTagsDefinition(element);
76+
}
77+
}
78+
6579
private void writeOpenAPI() {
6680
ctx.doc().writeApi();
6781
}

src/main/java/io/dinject/javalin/generator/openapi/DocContext.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import com.fasterxml.jackson.databind.ObjectMapper;
66
import com.fasterxml.jackson.databind.SerializationFeature;
77
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
8+
import io.swagger.v3.oas.annotations.tags.Tag;
9+
import io.swagger.v3.oas.annotations.tags.Tags;
810
import io.swagger.v3.oas.models.Components;
911
import io.swagger.v3.oas.models.OpenAPI;
1012
import io.swagger.v3.oas.models.Operation;
@@ -131,6 +133,33 @@ private Components components() {
131133
return components;
132134
}
133135

136+
private io.swagger.v3.oas.models.tags.Tag createTagItem(Tag tag){
137+
io.swagger.v3.oas.models.tags.Tag tagsItem = new io.swagger.v3.oas.models.tags.Tag();
138+
tagsItem.setName(tag.name());
139+
tagsItem.setDescription(tag.description());
140+
// tagsItem.setExtensions(tag.extensions()); # Not sure about the extensions
141+
// tagsItem.setExternalDocs(tag.externalDocs()); # Not sure about the external docs
142+
return tagsItem;
143+
}
144+
145+
public void addTagsDefinition(Element element) {
146+
Tags tags = element.getAnnotation(Tags.class);
147+
if(tags == null)
148+
return;
149+
150+
for(Tag tag: tags.value()){
151+
openAPI.addTagsItem(createTagItem(tag));
152+
}
153+
}
154+
155+
public void addTagDefinition(Element element){
156+
Tag tag = element.getAnnotation(Tag.class);
157+
if(tag == null)
158+
return;
159+
160+
openAPI.addTagsItem(createTagItem(tag));
161+
}
162+
134163
public void readApiDefinition(Element element) {
135164

136165
OpenAPIDefinition openApi = element.getAnnotation(OpenAPIDefinition.class);

src/main/java/io/dinject/javalin/generator/openapi/MethodDocBuilder.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public void build() {
3636
//operation.setOperationId();
3737
operation.setSummary(javadoc.getSummary());
3838
operation.setDescription(javadoc.getDescription());
39+
operation.setTags(methodReader.getTags());
3940

4041
if (javadoc.isDeprecated()) {
4142
operation.setDeprecated(true);

0 commit comments

Comments
 (0)