Skip to content

Commit 6b0ae36

Browse files
committed
removed loombok from annotation processor
1 parent 4b7505c commit 6b0ae36

5 files changed

Lines changed: 129 additions & 28 deletions

File tree

dynamic-relations/src/main/java/at/drm/factory/RelationDaoFactory.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@
1313
import java.util.Set;
1414

1515
@Component
16-
@RequiredArgsConstructor
1716
public class RelationDaoFactory {
1817

1918
private final ApplicationContext applicationContext;
2019

20+
public RelationDaoFactory(ApplicationContext applicationContext) {
21+
this.applicationContext = applicationContext;
22+
}
23+
2124
public RelationDao getDaoFromSourceObjectClass(Class dynamicRelactionClass) {
2225
Map<String, RelationDao> beansOfType = applicationContext.getBeansOfType(RelationDao.class);
2326
RelationDao relationDao = beansOfType.values().stream()

dynamic-relations/src/main/java/at/drm/processor/ReleationProcessor.java

Lines changed: 56 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -97,18 +97,62 @@ private void createDynamicRelationEntity(RelationMetaData entityMetaData) {
9797
String packageName = entityMetaData.packageName();
9898
TypeName sourceObjectName = entityMetaData.sourceObjectName();
9999
TypeSpec relationEntity = TypeSpec.classBuilder(generatedName)
100-
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
101-
.addSuperinterface(
102-
ParameterizedTypeName.get(ClassName.get(RelationLink.class), sourceObjectName))
103-
.addAnnotation(Entity.class)
104-
.addAnnotation(Setter.class)
105-
.addAnnotation(Getter.class)
106-
.addAnnotation(createTableAnnotation(generatedName))
107-
.addField(createIdAnnotation())
108-
.addField(createSourceObjectField(sourceObjectName))
109-
.addField(createTargetIdField())
110-
.addField(createTargetTypeField())
111-
.build();
100+
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
101+
.addSuperinterface(
102+
ParameterizedTypeName.get(ClassName.get(RelationLink.class), sourceObjectName))
103+
.addAnnotation(Entity.class)
104+
.addAnnotation(createTableAnnotation(generatedName))
105+
.addField(createIdAnnotation())
106+
.addField(createSourceObjectField(sourceObjectName))
107+
.addField(createTargetIdField())
108+
.addField(createTargetTypeField())
109+
// expliziter Konstruktor
110+
.addMethod(MethodSpec.constructorBuilder()
111+
.addModifiers(Modifier.PUBLIC)
112+
.build())
113+
// Getter für die Felder
114+
.addMethod(MethodSpec.methodBuilder("getId")
115+
.addModifiers(Modifier.PUBLIC)
116+
.returns(Long.class)
117+
.addStatement("return this.id")
118+
.build())
119+
.addMethod(MethodSpec.methodBuilder("getSourceObject")
120+
.addModifiers(Modifier.PUBLIC)
121+
.returns(sourceObjectName)
122+
.addStatement("return this.sourceObject")
123+
.build())
124+
.addMethod(MethodSpec.methodBuilder("getTargetId")
125+
.addModifiers(Modifier.PUBLIC)
126+
.returns(Long.class)
127+
.addStatement("return this.targetId")
128+
.build())
129+
.addMethod(MethodSpec.methodBuilder("getTargetType")
130+
.addModifiers(Modifier.PUBLIC)
131+
.returns(String.class)
132+
.addStatement("return this.targetType")
133+
.build())
134+
// Setter für die Felder
135+
.addMethod(MethodSpec.methodBuilder("setId")
136+
.addModifiers(Modifier.PUBLIC)
137+
.addParameter(Long.class, "id")
138+
.addStatement("this.id = id")
139+
.build())
140+
.addMethod(MethodSpec.methodBuilder("setSourceObject")
141+
.addModifiers(Modifier.PUBLIC)
142+
.addParameter(sourceObjectName, "sourceObject")
143+
.addStatement("this.sourceObject = sourceObject")
144+
.build())
145+
.addMethod(MethodSpec.methodBuilder("setTargetId")
146+
.addModifiers(Modifier.PUBLIC)
147+
.addParameter(Long.class, "targetId")
148+
.addStatement("this.targetId = targetId")
149+
.build())
150+
.addMethod(MethodSpec.methodBuilder("setTargetType")
151+
.addModifiers(Modifier.PUBLIC)
152+
.addParameter(String.class, "targetType")
153+
.addStatement("this.targetType = targetType")
154+
.build())
155+
.build();
112156
JavaFile entityJavaFile = JavaFile.builder(packageName, relationEntity)
113157
.build();
114158
createJavaClass(entityJavaFile);

dynamic-relations/src/main/java/at/drm/service/RelationService.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@
1616
import java.util.Set;
1717

1818
@Service
19-
@RequiredArgsConstructor
2019
public class RelationService {
2120

2221
private final RelationDaoFactory relationDaoFactory;
2322

23+
public RelationService(RelationDaoFactory relationDaoFactory) {
24+
this.relationDaoFactory = relationDaoFactory;
25+
}
26+
2427
public RelationLink createRelation(@NonNull Object sourceObject, @NonNull RelationIdentity targetObect) {
2528
Long targetId = targetObect.getId();
2629
String targetType = targetObect.getType();

dynamic-relations/src/test/java/at/drm/processor/ReleationProcessorTest.java

Lines changed: 56 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,61 @@ void getSupportedSourceVersion() {
5353

5454
@Test
5555
void process() {
56-
ReleationProcessor releationProcessor = new ReleationProcessor();
57-
Compilation compilation = javac()
58-
.withProcessors(releationProcessor)
59-
.compile(JavaFileObjects.forResource("TestFile.java"));
60-
//TODO cant compile because of lombok missing overrides annoation
61-
CompilationSubject.assertThat(compilation)
62-
.hadErrorContaining("is not abstract and does not override abstract method");
63-
// CompilationSubject.assertThat(compilation).succeeded();
64-
// ImmutableList<JavaFileObject> generatedFiles = compilation.generatedFiles();
65-
// assertThat(generatedFiles).isNotEmpty();
56+
ReleationProcessor releationProcessor = new ReleationProcessor();
57+
Compilation compilation = javac()
58+
.withProcessors(releationProcessor)
59+
.compile(JavaFileObjects.forResource("TestFile.java"));
60+
CompilationSubject.assertThat(compilation).succeeded();
61+
com.google.common.collect.ImmutableList<javax.tools.JavaFileObject> generatedFiles = compilation.generatedFiles();
62+
assertThat(generatedFiles).isNotEmpty();
63+
64+
// Zusätzliche Prüfung: Methoden vorhanden
65+
RelationClassMethods methods = generatedFiles.stream()
66+
.filter(file -> file.getName().endsWith("Relation.java"))
67+
.map(this::extractMethodsFromFile)
68+
.findFirst()
69+
.orElseThrow(() -> new IllegalStateException("Keine generierte Relation-Klasse gefunden!"));
70+
71+
assertThat(methods.hasGetterId).isTrue();
72+
assertThat(methods.hasSetterId).isTrue();
73+
assertThat(methods.hasGetterSourceObject).isTrue();
74+
assertThat(methods.hasSetterSourceObject).isTrue();
75+
assertThat(methods.hasGetterTargetId).isTrue();
76+
assertThat(methods.hasSetterTargetId).isTrue();
77+
assertThat(methods.hasGetterTargetType).isTrue();
78+
assertThat(methods.hasSetterTargetType).isTrue();
79+
assertThat(methods.hasConstructor).isTrue();
6680
}
6781

68-
}
82+
private RelationClassMethods extractMethodsFromFile(javax.tools.JavaFileObject file) {
83+
RelationClassMethods result = new RelationClassMethods();
84+
try (java.io.InputStream is = file.openInputStream();
85+
java.util.Scanner scanner = new java.util.Scanner(is).useDelimiter("\\A")) {
86+
String content = scanner.hasNext() ? scanner.next() : "";
87+
result.hasGetterId = content.contains("public Long getId()");
88+
result.hasSetterId = content.contains("public void setId(Long id)");
89+
result.hasGetterSourceObject = content.contains("public ") && content.contains(" getSourceObject()");
90+
result.hasSetterSourceObject = content.contains("public void setSourceObject");
91+
result.hasGetterTargetId = content.contains("public Long getTargetId()");
92+
result.hasSetterTargetId = content.contains("public void setTargetId(Long targetId)");
93+
result.hasGetterTargetType = content.contains("public String getTargetType()");
94+
result.hasSetterTargetType = content.contains("public void setTargetType(String targetType)");
95+
result.hasConstructor = content.contains("public ") && content.contains("() {");
96+
} catch (Exception e) {
97+
throw new RuntimeException(e);
98+
}
99+
return result;
100+
}
101+
102+
private static class RelationClassMethods {
103+
boolean hasGetterId = false;
104+
boolean hasSetterId = false;
105+
boolean hasGetterSourceObject = false;
106+
boolean hasSetterSourceObject = false;
107+
boolean hasGetterTargetId = false;
108+
boolean hasSetterTargetId = false;
109+
boolean hasGetterTargetType = false;
110+
boolean hasSetterTargetType = false;
111+
boolean hasConstructor = false;
112+
}
113+
}
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import at.drm.annotation.Relation;
2-
import lombok.Data;
2+
// Lombok entfernt, Methoden werden manuell implementiert
33

44
import jakarta.persistence.Entity;
55
import jakarta.persistence.GeneratedValue;
@@ -8,12 +8,18 @@
88

99
@Relation(sourceClass = TestFile.class)
1010
@Entity
11-
@Data
1211
public class TestFile {
13-
1412
@Id
1513
@GeneratedValue(strategy = GenerationType.IDENTITY)
1614
private Long id;
1715

16+
public TestFile() {}
17+
18+
public Long getId() {
19+
return id;
20+
}
1821

22+
public void setId(Long id) {
23+
this.id = id;
24+
}
1925
}

0 commit comments

Comments
 (0)