Skip to content

Commit c9f358a

Browse files
committed
Reworking annotation processor to support code generation for multiple manifest schema versions.
1 parent afbc0d3 commit c9f358a

9 files changed

Lines changed: 713 additions & 27 deletions

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.7</version>
9+
<version>1.0.8</version>
1010

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

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,15 @@
55

66
@NoArgsConstructor(access = AccessLevel.PRIVATE)
77
public class Constants {
8-
public static final String MANIFEST_FILE = "clockify-manifest-v1.2.json";
98
public static final String DELIMITER_NAME_PARTS = "_";
109

1110
public static final String REGEX_METHOD_NAME_SPLIT = "[.\\-_]";
1211
public static final String REGEX_UPPER_CASE_SPLIT = "(?=\\p{Upper})";
1312

13+
public static final String CLOCKIFY_MODEL_PACKAGE = "com.cake.clockify.addonsdk.clockify.model";
14+
public static final String CLOCKIFY_MANIFESTS_DIR = "clockify-manifests";
15+
1416
public static final String CLOCKIFY_PREFIX = "Clockify";
17+
public static final String CLOCKIFY_MANIFEST_INTERFACE = "ClockifyManifest";
18+
public static final String CLOCKIFY_PATH_INTERFACE = "ClockifyResource";
1519
}

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,13 @@ private void processAnnotation(TypeElement annotation, RoundEnvironment roundEnv
4444
for (Element element : elements) {
4545
DeclaredType type = (DeclaredType) element.asType();
4646

47-
try {
48-
files.addAll(new ClockifyManifestProcessor(type).process());
49-
} catch (Exception e) {
50-
e.printStackTrace();
51-
throw new RuntimeException(e);
47+
for (String manifestPath: Utils.getClockifyManifestPaths()) {
48+
try {
49+
files.addAll(new ClockifyManifestProcessor(type, manifestPath).process());
50+
} catch (Exception e) {
51+
e.printStackTrace();
52+
throw new RuntimeException(e);
53+
}
5254
}
5355
}
5456

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

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,18 @@
1010

1111
import javax.lang.model.type.DeclaredType;
1212
import java.io.InputStream;
13+
import java.net.URL;
14+
import java.nio.file.Files;
15+
import java.nio.file.Path;
16+
import java.nio.file.Paths;
1317
import java.util.Iterator;
1418
import java.util.LinkedList;
1519
import java.util.List;
1620
import java.util.Locale;
1721
import java.util.Map;
1822

1923
import static com.cake.clockify.annotationprocessor.Constants.CLOCKIFY_PREFIX;
20-
import static com.cake.clockify.annotationprocessor.Constants.MANIFEST_FILE;
24+
import static com.cake.clockify.annotationprocessor.Constants.CLOCKIFY_MANIFESTS_DIR;
2125
import static com.cake.clockify.annotationprocessor.Constants.REGEX_METHOD_NAME_SPLIT;
2226
import static com.cake.clockify.annotationprocessor.Constants.REGEX_UPPER_CASE_SPLIT;
2327
import static java.util.Collections.emptyList;
@@ -31,8 +35,19 @@ public class Utils {
3135
);
3236

3337
@SneakyThrows
34-
public static JsonNode readManifestDefinition(ObjectMapper mapper) {
35-
InputStream is = Utils.class.getClassLoader().getResourceAsStream(MANIFEST_FILE);
38+
public static List<String> getClockifyManifestPaths() {
39+
URL url = Utils.class.getClassLoader().getResource(CLOCKIFY_MANIFESTS_DIR);
40+
Path path = Paths.get(url.toURI());
41+
try (var files = Files.walk(path, 1)) {
42+
return files.filter(p -> p.toFile().isFile())
43+
.map(p -> CLOCKIFY_MANIFESTS_DIR + "/" + p.getFileName().toString())
44+
.toList();
45+
}
46+
}
47+
48+
@SneakyThrows
49+
public static JsonNode readManifestDefinition(ObjectMapper mapper, String manifestPath) {
50+
InputStream is = Utils.class.getClassLoader().getResourceAsStream(manifestPath);
3651
return mapper.readTree(is);
3752
}
3853

@@ -174,4 +189,11 @@ public static String getPropertyDescription(JsonNode node) {
174189
}
175190
return "";
176191
}
192+
193+
public static String getVersionedPackageName(JsonNode manifest, String packageName) {
194+
String version = manifest.get("version").asText();
195+
String versionSubpackage = "v" + version.replace(".", "_");
196+
197+
return packageName + "." + versionSubpackage;
198+
}
177199
}

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ public class ClockifyManifestProcessor {
1818
private final String packageName;
1919
private final String className;
2020

21-
public ClockifyManifestProcessor(DeclaredType type) {
22-
this.manifest = Utils.readManifestDefinition(new ObjectMapper());
21+
public ClockifyManifestProcessor(DeclaredType type, String manifestPath) {
22+
this.manifest = Utils.readManifestDefinition(new ObjectMapper(), manifestPath);
2323

2424
String[] qualifiedNames = Utils.getPackageAndClassNames(type);
2525
this.packageName = qualifiedNames[0];
@@ -40,7 +40,6 @@ private List<JavaFile> getObjectDefinitions() {
4040
if (isObjectDefinition(node)) {
4141
DefinitionProcessor processor = new DefinitionProcessor(
4242
manifest,
43-
packageName,
4443
Utils.getDefinitionSimpleClassName(definition),
4544
definition
4645
);
@@ -49,7 +48,6 @@ private List<JavaFile> getObjectDefinitions() {
4948
} else if (isEnumDefinition(node)) {
5049
EnumConstantsProcessor processor = new EnumConstantsProcessor(
5150
manifest,
52-
packageName,
5351
definition
5452
);
5553

@@ -61,7 +59,7 @@ private List<JavaFile> getObjectDefinitions() {
6159
}
6260

6361
private List<JavaFile> getManifestDefinition() {
64-
return new DefinitionProcessor(manifest, packageName, className, null).process();
62+
return new DefinitionProcessor(manifest, className, null).process();
6563
}
6664

6765
private boolean isObjectDefinition(JsonNode node) {

0 commit comments

Comments
 (0)