Skip to content

Commit 517b29f

Browse files
committed
Generating constants classes for enum definitions.
1 parent f0abdbd commit 517b29f

3 files changed

Lines changed: 75 additions & 1 deletion

File tree

annotation-processor/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.cake.clockify</groupId>
88
<artifactId>addon-sdk-annotation-processor</artifactId>
9-
<version>1.0.6</version>
9+
<version>1.0.7</version>
1010

1111
<properties>
1212
<maven.compiler.source>17</maven.compiler.source>

annotation-processor/src/main/java/com/cake/clockify/annotationprocessor/clockify/ClockifyManifestProcessor.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.cake.clockify.annotationprocessor.Utils;
55
import com.fasterxml.jackson.databind.JsonNode;
66
import com.fasterxml.jackson.databind.ObjectMapper;
7+
import com.fasterxml.jackson.databind.node.ArrayNode;
78
import com.squareup.javapoet.JavaFile;
89

910
import javax.lang.model.type.DeclaredType;
@@ -44,6 +45,14 @@ private List<JavaFile> getObjectDefinitions() {
4445
definition
4546
);
4647

48+
javaFiles.addAll(processor.process());
49+
} else if (isEnumDefinition(node)) {
50+
EnumConstantsProcessor processor = new EnumConstantsProcessor(
51+
manifest,
52+
packageName,
53+
definition
54+
);
55+
4756
javaFiles.addAll(processor.process());
4857
}
4958
});
@@ -58,4 +67,9 @@ private List<JavaFile> getManifestDefinition() {
5867
private boolean isObjectDefinition(JsonNode node) {
5968
return NodeConstants.OBJECT.equals(Utils.getNodeType(node, manifest.get(NodeConstants.DEFINITIONS)));
6069
}
70+
71+
private boolean isEnumDefinition(JsonNode node) {
72+
String type = Utils.getNodeType(node, manifest.get(NodeConstants.DEFINITIONS));
73+
return NodeConstants.STRING.equals(type) && node.get(NodeConstants.ENUM) instanceof ArrayNode;
74+
}
6175
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.cake.clockify.annotationprocessor.clockify;
2+
3+
import com.cake.clockify.annotationprocessor.NodeConstants;
4+
import com.cake.clockify.annotationprocessor.Utils;
5+
import com.fasterxml.jackson.databind.JsonNode;
6+
import com.squareup.javapoet.ClassName;
7+
import com.squareup.javapoet.FieldSpec;
8+
import com.squareup.javapoet.JavaFile;
9+
import com.squareup.javapoet.TypeSpec;
10+
11+
import javax.lang.model.element.Modifier;
12+
import java.util.LinkedList;
13+
import java.util.List;
14+
import java.util.Objects;
15+
16+
class EnumConstantsProcessor {
17+
18+
private final String packageName;
19+
private final String definition;
20+
21+
private final List<String> values = new LinkedList<>();
22+
23+
public EnumConstantsProcessor(JsonNode manifest, String packageName, String definition) {
24+
this.packageName = packageName;
25+
this.definition = definition;
26+
27+
JsonNode enumNode = manifest.get(NodeConstants.DEFINITIONS).get(definition).get(NodeConstants.ENUM);
28+
29+
Objects.requireNonNull(enumNode);
30+
if (!enumNode.isArray()) {
31+
throw new IllegalArgumentException("The provided definition is not of enum type.");
32+
}
33+
34+
enumNode.forEach(node -> values.add(node.asText()));
35+
}
36+
37+
public List<JavaFile> process() {
38+
return List.of(
39+
JavaFile.builder(packageName, TypeSpec.interfaceBuilder(getInterfaceClassName(definition))
40+
.addModifiers(Modifier.PUBLIC)
41+
.addFields(values.stream()
42+
.map(enumValue -> FieldSpec.builder(
43+
String.class,
44+
enumValue.replace(' ', '_'),
45+
Modifier.PUBLIC,
46+
Modifier.STATIC,
47+
Modifier.FINAL
48+
)
49+
.initializer("\"" + enumValue + "\"")
50+
.build()).toList()
51+
)
52+
.build())
53+
.build()
54+
);
55+
}
56+
57+
private ClassName getInterfaceClassName(String step) {
58+
return ClassName.get(packageName, Utils.getDefinitionSimpleClassName(step));
59+
}
60+
}

0 commit comments

Comments
 (0)