Skip to content

Commit 2c2ab61

Browse files
committed
Refactor ConfigContractProcessor: update dependency handling by changing dependency types from TypeElement to String, streamline class generation methods, and enhance type detection logic
1 parent be33e64 commit 2c2ab61

File tree

1 file changed

+48
-35
lines changed

1 file changed

+48
-35
lines changed

bridge-processor/src/main/java/net/democracycraft/democracyLib/processor/ConfigContractProcessor.java

Lines changed: 48 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.io.IOException;
1616
import java.io.PrintWriter;
1717
import java.util.ArrayList;
18+
import java.util.HashMap;
1819
import java.util.HashSet;
1920
import java.util.List;
2021
import java.util.Map;
@@ -100,7 +101,7 @@ private void processConfigClass(TypeElement classElement, String configurableNam
100101

101102
List<VariableElement> configFields = collectConfigurableFields(classElement, configValueName);
102103

103-
Set<TypeElement> dependencyTypes = new HashSet<>();
104+
Set<String> dependencyTypes = new HashSet<>();
104105
collectDependencies(configFields, dependencyTypes, configurableName);
105106

106107
generateClass(targetPackage, configName, configFields, extension, configValueName, generatedConfigName, dependencyTypes);
@@ -139,14 +140,14 @@ private List<VariableElement> collectConfigurableFields(TypeElement classElement
139140
return configFields;
140141
}
141142

142-
private void collectDependencies( List<VariableElement> fields, Set<TypeElement> dependencies, String configurableName) {
143+
private void collectDependencies( List<VariableElement> fields, Set<String> dependencies, String configurableName) {
143144
for (VariableElement field : fields) {
144145
TypeMirror fieldType = field.asType();
145146
TypeElement typeElement = getTypeElement(fieldType);
146147

147-
if (typeElement != null && !dependencies.contains(typeElement)) {
148+
if (typeElement != null && !dependencies.contains(typeElement.getQualifiedName().toString())) {
148149
if (isConfigurable(typeElement)) {
149-
dependencies.add(typeElement);
150+
dependencies.add(typeElement.getQualifiedName().toString());
150151
collectDependencies(collectConfigurableFields(typeElement, configurableName.replace("Configurable", "ConfigValue")), dependencies, configurableName);
151152
}
152153
}
@@ -157,8 +158,8 @@ private void collectDependencies( List<VariableElement> fields, Set<TypeElement>
157158
if (types.isSameType(types.erasure(declaredType), types.erasure(listElement.asType())) && !declaredType.getTypeArguments().isEmpty()) {
158159
TypeMirror genericType = declaredType.getTypeArguments().getFirst();
159160
TypeElement genericElement = getTypeElement(genericType);
160-
if (genericElement != null && !dependencies.contains(genericElement) && isConfigurable(genericElement)) {
161-
dependencies.add(genericElement);
161+
if (genericElement != null && !dependencies.contains(genericElement.getQualifiedName().toString()) && isConfigurable(genericElement)) {
162+
dependencies.add(genericElement.getQualifiedName().toString());
162163
collectDependencies(collectConfigurableFields(genericElement, configurableName.replace("Configurable", "ConfigValue")), dependencies, configurableName);
163164
}
164165
}
@@ -182,7 +183,7 @@ private boolean isConfigurable(TypeElement typeElement) {
182183
return false;
183184
}
184185

185-
private void generateClass(String packageName, String className, List<VariableElement> fields, String extension, String configValueName, String generatedConfigName, Set<TypeElement> dependencyTypes) throws IOException {
186+
private void generateClass(String packageName, String className, List<VariableElement> fields, String extension, String configValueName, String generatedConfigName, Set<String> dependencyTypes) throws IOException {
186187
JavaFileObject builderFile = processingEnv.getFiler().createSourceFile(packageName + "." + className);
187188
try (PrintWriter printWriter = new PrintWriter(builderFile.openWriter())) {
188189

@@ -208,9 +209,14 @@ private void generateClass(String packageName, String className, List<VariableEl
208209
for (VariableElement field : fields) {
209210
extractImports(field.asType().toString(), imports);
210211
}
211-
for (TypeElement dep : dependencyTypes) {
212-
imports.add(dep.getQualifiedName().toString());
213-
imports.add(getGeneratedConfigClassName(dep));
212+
Map<String, TypeElement> depElements = new HashMap<>();
213+
for (String dep : dependencyTypes) {
214+
TypeElement element = elements.getTypeElement(dep);
215+
if (element != null) {
216+
depElements.put(dep, element);
217+
imports.add(dep);
218+
imports.add(getGeneratedConfigClassName(element));
219+
}
214220
}
215221

216222
for (String importString : imports) {
@@ -227,10 +233,12 @@ private void generateClass(String packageName, String className, List<VariableEl
227233
printWriter.println();
228234

229235
// VarHandles
230-
for (TypeElement dep : dependencyTypes) {
231-
List<VariableElement> depFields = collectConfigurableFields(dep, configValueName);
236+
for (String dep : dependencyTypes) {
237+
TypeElement depElement = depElements.get(dep);
238+
if (depElement == null) continue;
239+
List<VariableElement> depFields = collectConfigurableFields(depElement, configValueName);
232240
for (VariableElement field : depFields) {
233-
String handleName = getHandleName(dep, field);
241+
String handleName = getHandleName(depElement, field);
234242
printWriter.println(" private static final VarHandle " + handleName + ";");
235243
}
236244
}
@@ -240,19 +248,21 @@ private void generateClass(String packageName, String className, List<VariableEl
240248
printWriter.println(" MethodHandles.Lookup lookup = MethodHandles.lookup();");
241249
printWriter.println(" try {");
242250

243-
for (TypeElement dep : dependencyTypes) {
244-
String depClassName = getGeneratedConfigClassName(dep);
245-
List<VariableElement> depFields = collectConfigurableFields(dep, configValueName);
251+
for (String dep : dependencyTypes) {
252+
TypeElement depElement = depElements.get(dep);
253+
if (depElement == null) continue;
254+
String depClassName = getGeneratedConfigClassName(depElement);
255+
List<VariableElement> depFields = collectConfigurableFields(depElement, configValueName);
246256
for (VariableElement field : depFields) {
247-
String handleName = getHandleName(dep, field);
257+
String handleName = getHandleName(depElement, field);
248258
String fieldName = field.getSimpleName().toString();
249259
String fieldTypeClass;
250260
if (isListType(field.asType())) {
251261
fieldTypeClass = "List.class";
252262
} else {
253263
// Check if it is a Configurable dependency, use generated class name .class
254264
TypeElement typeEle = getTypeElement(field.asType());
255-
if (typeEle != null && dependencyTypes.contains(typeEle)) {
265+
if (typeEle != null && dependencyTypes.contains(typeEle.getQualifiedName().toString())) {
256266
fieldTypeClass = getGeneratedConfigClassName(typeEle) + ".class";
257267
} else {
258268
fieldTypeClass = types.erasure(field.asType()).toString() + ".class";
@@ -272,7 +282,7 @@ private void generateClass(String packageName, String className, List<VariableEl
272282

273283
// Fields
274284
for (VariableElement field : fields) {
275-
String type = getFieldType(field, dependencyTypes);
285+
String type = getFieldType(field, dependencyTypes, depElements);
276286
printWriter.println(" private " + type + " " + field.getSimpleName() + ";");
277287
}
278288
printWriter.println();
@@ -312,8 +322,11 @@ private void generateClass(String packageName, String className, List<VariableEl
312322
printWriter.println();
313323

314324
// Serialization Helpers
315-
for (TypeElement dep : dependencyTypes) {
316-
generateDependencyHelpers(printWriter, dep, configValueName);
325+
for (String dep : dependencyTypes) {
326+
TypeElement depElement = depElements.get(dep);
327+
if (depElement != null) {
328+
generateDependencyHelpers(printWriter, depElement, configValueName, dependencyTypes);
329+
}
317330
}
318331

319332
// Load Method (Sync)
@@ -328,7 +341,7 @@ private void generateClass(String packageName, String className, List<VariableEl
328341
printWriter.println();
329342

330343
for (VariableElement field : fields) {
331-
generateFieldLoad(printWriter, field, configValueName, dependencyTypes);
344+
generateFieldLoad(printWriter, field, configValueName, dependencyTypes, depElements);
332345
}
333346

334347
printWriter.println(" }");
@@ -343,7 +356,7 @@ private void generateClass(String packageName, String className, List<VariableEl
343356
// Save Method (Sync)
344357
printWriter.println(" public void save() {");
345358
for (VariableElement field : fields) {
346-
generateFieldSave(printWriter, field, configValueName, dependencyTypes);
359+
generateFieldSave(printWriter, field, configValueName, dependencyTypes, depElements);
347360
}
348361
printWriter.println(" try {");
349362
printWriter.println(" yamlConfiguration.save(file);");
@@ -378,12 +391,12 @@ private void generateClass(String packageName, String className, List<VariableEl
378391
}
379392
}
380393

381-
private String getFieldType(VariableElement field, Set<TypeElement> dependencyTypes) {
394+
private String getFieldType(VariableElement field, Set<String> dependencyTypes, Map<String, TypeElement> depElements) {
382395
TypeMirror typeMirror = field.asType();
383396
TypeElement typeElement = getTypeElement(typeMirror);
384397

385398
// Check exact match
386-
if (typeElement != null && dependencyTypes.contains(typeElement)) {
399+
if (typeElement != null && dependencyTypes.contains(typeElement.getQualifiedName().toString())) {
387400
return getGeneratedSimpleClassName(typeElement);
388401
}
389402

@@ -393,7 +406,7 @@ private String getFieldType(VariableElement field, Set<TypeElement> dependencyTy
393406
if (!dt.getTypeArguments().isEmpty()) {
394407
TypeMirror generic = dt.getTypeArguments().getFirst();
395408
TypeElement genericElement = getTypeElement(generic);
396-
if (genericElement != null && dependencyTypes.contains(genericElement)) {
409+
if (genericElement != null && dependencyTypes.contains(genericElement.getQualifiedName().toString())) {
397410
return "List<" + getGeneratedSimpleClassName(genericElement) + ">";
398411
}
399412
}
@@ -406,7 +419,7 @@ private String getHandleName(TypeElement type, VariableElement field) {
406419
return "HANDLE_" + typeName + "_" + field.getSimpleName();
407420
}
408421

409-
private void generateDependencyHelpers(PrintWriter printWriter, TypeElement typeElement, String configValueName) {
422+
private void generateDependencyHelpers(PrintWriter printWriter, TypeElement typeElement, String configValueName, Set<String> dependencyTypes) {
410423
String typeName = typeElement.getSimpleName().toString();
411424
List<VariableElement> fields = collectConfigurableFields(typeElement, configValueName);
412425

@@ -423,7 +436,7 @@ private void generateDependencyHelpers(PrintWriter printWriter, TypeElement type
423436
// Nested check
424437
TypeMirror fieldType = field.asType();
425438
TypeElement fieldTypeElement = getTypeElement(fieldType);
426-
boolean isNested = fieldTypeElement != null && isConfigurable(fieldTypeElement);
439+
boolean isNested = fieldTypeElement != null && dependencyTypes.contains(fieldTypeElement.getQualifiedName().toString());
427440

428441
if (isNested) {
429442
printWriter.println(" map.put(\"" + path + "\", serialize" + fieldTypeElement.getSimpleName() + "((" + getGeneratedSimpleClassName(fieldTypeElement) + ") " + handleName + ".get(instance)));");
@@ -453,7 +466,7 @@ private void generateDependencyHelpers(PrintWriter printWriter, TypeElement type
453466
// Nested check
454467
TypeMirror fieldType = field.asType();
455468
TypeElement fieldTypeElement = getTypeElement(fieldType);
456-
boolean isNested = fieldTypeElement != null && isConfigurable(fieldTypeElement);
469+
boolean isNested = fieldTypeElement != null && dependencyTypes.contains(fieldTypeElement.getQualifiedName().toString());
457470

458471
printWriter.println(" if (map.containsKey(\"" + path + "\")) {");
459472
if (isNested) {
@@ -483,7 +496,7 @@ private void generateDependencyHelpers(PrintWriter printWriter, TypeElement type
483496
printWriter.println();
484497
}
485498

486-
private void generateFieldLoad(PrintWriter printWriter, VariableElement field, String configValueName, Set<TypeElement> dependencyTypes) {
499+
private void generateFieldLoad(PrintWriter printWriter, VariableElement field, String configValueName, Set<String> dependencyTypes, Map<String, TypeElement> depElements) {
487500
AnnotationMirror cv = getAnnotationMirror(field, configValueName);
488501
if (cv == null) return;
489502
String path = getAnnotationValue(cv, "fieldName", String.class);
@@ -492,7 +505,7 @@ private void generateFieldLoad(PrintWriter printWriter, VariableElement field, S
492505

493506
// Check if nested
494507
TypeElement typeElement = getTypeElement(field.asType());
495-
boolean isNested = typeElement != null && dependencyTypes.contains(typeElement);
508+
boolean isNested = typeElement != null && dependencyTypes.contains(typeElement.getQualifiedName().toString());
496509

497510
// Check if List<Nested>
498511
boolean isListNested = false;
@@ -501,7 +514,7 @@ private void generateFieldLoad(PrintWriter printWriter, VariableElement field, S
501514
DeclaredType dt = (DeclaredType) field.asType();
502515
if (!dt.getTypeArguments().isEmpty()) {
503516
listGenericType = getTypeElement(dt.getTypeArguments().getFirst());
504-
if (listGenericType != null && dependencyTypes.contains(listGenericType)) {
517+
if (listGenericType != null && dependencyTypes.contains(listGenericType.getQualifiedName().toString())) {
505518
isListNested = true;
506519
}
507520
}
@@ -535,14 +548,14 @@ private void generateFieldLoad(PrintWriter printWriter, VariableElement field, S
535548
printWriter.println(" }");
536549
}
537550

538-
private void generateFieldSave(PrintWriter printWriter, VariableElement field, String configValueName, Set<TypeElement> dependencyTypes) {
551+
private void generateFieldSave(PrintWriter printWriter, VariableElement field, String configValueName, Set<String> dependencyTypes, Map<String, TypeElement> depElements) {
539552
AnnotationMirror cv = getAnnotationMirror(field, configValueName);
540553
if (cv == null) return;
541554
String path = getAnnotationValue(cv, "fieldName", String.class);
542555

543556
// Check nested
544557
TypeElement typeElement = getTypeElement(field.asType());
545-
boolean isNested = typeElement != null && dependencyTypes.contains(typeElement);
558+
boolean isNested = typeElement != null && dependencyTypes.contains(typeElement.getQualifiedName().toString());
546559

547560
// Check List<Nested>
548561
boolean isListNested = false;
@@ -551,7 +564,7 @@ private void generateFieldSave(PrintWriter printWriter, VariableElement field, S
551564
DeclaredType dt = (DeclaredType) field.asType();
552565
if (!dt.getTypeArguments().isEmpty()) {
553566
listGenericType = getTypeElement(dt.getTypeArguments().getFirst());
554-
if (listGenericType != null && dependencyTypes.contains(listGenericType)) {
567+
if (listGenericType != null && dependencyTypes.contains(listGenericType.getQualifiedName().toString())) {
555568
isListNested = true;
556569
}
557570
}

0 commit comments

Comments
 (0)