55import at .drm .model .RelationLink ;
66import at .drm .model .RelationMetaData ;
77import com .google .auto .service .AutoService ;
8- import com .squareup .javapoet .*;
9- import jakarta .persistence .*;
10-
11- import javax .annotation .processing .*;
8+ import com .squareup .javapoet .AnnotationSpec ;
9+ import com .squareup .javapoet .ClassName ;
10+ import com .squareup .javapoet .CodeBlock ;
11+ import com .squareup .javapoet .FieldSpec ;
12+ import com .squareup .javapoet .JavaFile ;
13+ import com .squareup .javapoet .MethodSpec ;
14+ import com .squareup .javapoet .ParameterizedTypeName ;
15+ import com .squareup .javapoet .TypeName ;
16+ import com .squareup .javapoet .TypeSpec ;
17+ import com .squareup .javapoet .TypeVariableName ;
18+ import jakarta .persistence .Column ;
19+ import jakarta .persistence .Entity ;
20+ import jakarta .persistence .GeneratedValue ;
21+ import jakarta .persistence .GenerationType ;
22+ import jakarta .persistence .Id ;
23+ import jakarta .persistence .JoinColumn ;
24+ import jakarta .persistence .ManyToOne ;
25+ import jakarta .persistence .Table ;
26+ import jakarta .persistence .UniqueConstraint ;
27+ import java .io .IOException ;
28+ import java .util .LinkedHashSet ;
29+ import java .util .Set ;
30+ import javax .annotation .processing .AbstractProcessor ;
31+ import javax .annotation .processing .Filer ;
32+ import javax .annotation .processing .Messager ;
33+ import javax .annotation .processing .ProcessingEnvironment ;
34+ import javax .annotation .processing .Processor ;
35+ import javax .annotation .processing .RoundEnvironment ;
1236import javax .lang .model .SourceVersion ;
1337import javax .lang .model .element .Element ;
1438import javax .lang .model .element .Modifier ;
1539import javax .lang .model .element .TypeElement ;
1640import javax .lang .model .type .MirroredTypeException ;
1741import javax .lang .model .type .TypeMirror ;
1842import javax .tools .Diagnostic ;
19- import java .io .IOException ;
20- import java .util .LinkedHashSet ;
21- import java .util .Set ;
2243
2344@ AutoService (Processor .class )
2445public class ReleationProcessor extends AbstractProcessor {
@@ -40,15 +61,15 @@ public Set<String> getSupportedAnnotationTypes() {
4061 Set <String > annotations = new LinkedHashSet <>();
4162 annotations .add (Relation .class .getCanonicalName ());
4263 processingEnv .getMessager ()
43- .printMessage (Diagnostic .Kind .NOTE , "getSupportedAnnotationTypes: "
44- + annotations );
64+ .printMessage (Diagnostic .Kind .NOTE , "getSupportedAnnotationTypes: "
65+ + annotations );
4566 return annotations ;
4667 }
4768
4869 @ Override
4970 public SourceVersion getSupportedSourceVersion () {
5071 processingEnv .getMessager ().printMessage (Diagnostic .Kind .NOTE , "getSupportedSourceVersion" );
51- return SourceVersion .RELEASE_17 ;
72+ return SourceVersion .RELEASE_21 ;
5273 }
5374
5475 @ Override
@@ -68,7 +89,7 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
6889 private RelationMetaData createEntityMetaData (Element relationElement ) {
6990 Relation relationAnnotation = relationElement .getAnnotation (Relation .class );
7091 String elementPackage = processingEnv .getElementUtils ()
71- .getPackageOf (relationElement ).getQualifiedName ().toString ();
92+ .getPackageOf (relationElement ).getQualifiedName ().toString ();
7293 TypeName sourceObjectName = getSourceObjectTypeName (relationAnnotation );
7394 String sourceObjectWithoutPackages = sourceObjectName .toString ().replace (elementPackage + "." , "" );
7495 String generatedEntityName = sourceObjectWithoutPackages + "Relation" ;
@@ -80,13 +101,14 @@ private void createDynamicRelationDao(RelationMetaData entityMetaData) {
80101 String generatedName = entityMetaData .generatedName ();
81102 ClassName entityClassName = ClassName .get (packageName , generatedName );
82103 TypeName longTypeName = TypeVariableName .get (Long .class );
83- TypeSpec relationDao = TypeSpec .interfaceBuilder (entityMetaData .generatedName ().replace ("Relation" , "RelationDao" ))
84- .addModifiers (Modifier .PUBLIC )
85- .addSuperinterface (
86- ParameterizedTypeName .get (ClassName .get (RelationDao .class ), entityClassName , longTypeName ))
87- .build ();
104+ TypeSpec relationDao = TypeSpec .interfaceBuilder (
105+ entityMetaData .generatedName ().replace ("Relation" , "RelationDao" ))
106+ .addModifiers (Modifier .PUBLIC )
107+ .addSuperinterface (
108+ ParameterizedTypeName .get (ClassName .get (RelationDao .class ), entityClassName , longTypeName ))
109+ .build ();
88110 JavaFile javaFileDao = JavaFile .builder (packageName , relationDao )
89- .build ();
111+ .build ();
90112 createJavaClass (javaFileDao );
91113 }
92114
@@ -152,26 +174,26 @@ private void createDynamicRelationEntity(RelationMetaData entityMetaData) {
152174 .build ())
153175 .build ();
154176 JavaFile entityJavaFile = JavaFile .builder (packageName , relationEntity )
155- .build ();
177+ .build ();
156178 createJavaClass (entityJavaFile );
157179 }
158180
159181 private static FieldSpec createTargetTypeField () {
160182 return FieldSpec .builder (String .class , "targetType" , Modifier .PRIVATE )
161- .addAnnotation (AnnotationSpec .builder (Column .class )
162- .addMember ("name" , "$S" , "target_type" )
163- .addMember ("nullable" , "$L" , false )
164- .build ())
165- .build ();
183+ .addAnnotation (AnnotationSpec .builder (Column .class )
184+ .addMember ("name" , "$S" , "target_type" )
185+ .addMember ("nullable" , "$L" , false )
186+ .build ())
187+ .build ();
166188 }
167189
168190 private static FieldSpec createTargetIdField () {
169191 return FieldSpec .builder (Long .class , "targetId" , Modifier .PRIVATE )
170- .addAnnotation (AnnotationSpec .builder (Column .class )
171- .addMember ("name" , "$S" , "target_id" )
172- .addMember ("nullable" , "$L" , false )
173- .build ())
174- .build ();
192+ .addAnnotation (AnnotationSpec .builder (Column .class )
193+ .addMember ("name" , "$S" , "target_id" )
194+ .addMember ("nullable" , "$L" , false )
195+ .build ())
196+ .build ();
175197 }
176198
177199 private TypeName getSourceObjectTypeName (Relation annotation ) {
@@ -182,48 +204,48 @@ private TypeName getSourceObjectTypeName(Relation annotation) {
182204
183205 private FieldSpec createSourceObjectField (TypeName typeName ) {
184206 return FieldSpec .builder (typeName , "sourceObject" , Modifier .PRIVATE )
185- .addAnnotation (ManyToOne .class )
186- .addAnnotation (createJoinColumnAnnotaion ())
187- .build ();
207+ .addAnnotation (ManyToOne .class )
208+ .addAnnotation (createJoinColumnAnnotaion ())
209+ .build ();
188210 }
189211
190212 private FieldSpec createIdAnnotation () {
191213 return FieldSpec .builder (Long .class , "id" , Modifier .PRIVATE )
192- .addAnnotation (Id .class )
193- .addAnnotation (createGeneratedValueAnnotation ())
194- .build ();
214+ .addAnnotation (Id .class )
215+ .addAnnotation (createGeneratedValueAnnotation ())
216+ .build ();
195217 }
196218
197219 private AnnotationSpec createJoinColumnAnnotaion () {
198220 return AnnotationSpec .builder (JoinColumn .class )
199- .addMember ("name" , "$S" , "source_object" )
200- .build ();
221+ .addMember ("name" , "$S" , "source_object" )
222+ .build ();
201223 }
202224
203225 private AnnotationSpec createGeneratedValueAnnotation () {
204226 return AnnotationSpec .builder (GeneratedValue .class )
205- .addMember ("strategy" , "$T.$L" , GenerationType .class , GenerationType .IDENTITY .name ())
206- .build ();
227+ .addMember ("strategy" , "$T.$L" , GenerationType .class , GenerationType .IDENTITY .name ())
228+ .build ();
207229 }
208230
209231 private AnnotationSpec createTableAnnotation (String generatedName ) {
210232 return AnnotationSpec .builder (Table .class )
211- .addMember ("name" , "$S" , generatedName )
212- .addMember ("uniqueConstraints" , CodeBlock .builder ()
213- .add ("{ @$T(name = " + "\" unique_$L\" , columnNames = " +
214- "{ \" target_id\" , \" target_type\" ,\" source_object\" })}" ,
215- UniqueConstraint .class , generatedName )
216- .build ())
217- .build ();
233+ .addMember ("name" , "$S" , generatedName )
234+ .addMember ("uniqueConstraints" , CodeBlock .builder ()
235+ .add ("{ @$T(name = " + "\" unique_$L\" , columnNames = " +
236+ "{ \" target_id\" , \" target_type\" ,\" source_object\" })}" ,
237+ UniqueConstraint .class , generatedName )
238+ .build ())
239+ .build ();
218240 }
219241
220242 private void createJavaClass (JavaFile javaFile ) {
221243 try {
222244 javaFile .writeTo (filer );
223245 } catch (IOException e ) {
224246 processingEnv .getMessager ()
225- .printMessage (Diagnostic .Kind .ERROR , "ERROR ON write file: " +
226- e .getMessage ());
247+ .printMessage (Diagnostic .Kind .ERROR , "ERROR ON write file: " +
248+ e .getMessage ());
227249 }
228250 }
229251
0 commit comments