@@ -398,72 +398,7 @@ private void processClasses(RoundEnvironment roundEnvironment) {
398
398
399
399
private void processElement (Element element , @ Nullable Element parent ) {
400
400
try {
401
- if ( !included ( element )
402
- || hasAnnotation ( element , Constants .EXCLUDE )
403
- || hasPackageAnnotation ( element , Constants .EXCLUDE )
404
- || element .getModifiers ().contains ( Modifier .PRIVATE ) ) {
405
- // skip it completely
406
- return ;
407
- }
408
- else if ( isEntityOrEmbeddable ( element )
409
- && !element .getModifiers ().contains ( Modifier .PRIVATE ) ) {
410
- context .logMessage ( Diagnostic .Kind .OTHER , "Processing annotated entity class '" + element + "'" );
411
- handleRootElementAnnotationMirrors ( element , parent );
412
- }
413
- else if ( hasAuxiliaryAnnotations ( element ) ) {
414
- context .logMessage ( Diagnostic .Kind .OTHER , "Processing annotated class '" + element + "'" );
415
- handleRootElementAuxiliaryAnnotationMirrors ( element );
416
- }
417
- else if ( element instanceof TypeElement typeElement ) {
418
- final AnnotationMirror repository = getAnnotationMirror ( element , JD_REPOSITORY );
419
- if ( repository != null ) {
420
- final AnnotationValue provider = getAnnotationValue ( repository , "provider" );
421
- if ( provider == null
422
- || provider .getValue ().toString ().isEmpty ()
423
- || provider .getValue ().toString ().equalsIgnoreCase ("hibernate" ) ) {
424
- context .logMessage ( Diagnostic .Kind .OTHER , "Processing repository class '" + element + "'" );
425
- final AnnotationMetaEntity metaEntity =
426
- AnnotationMetaEntity .create ( typeElement , context ,
427
- parentMetadata ( parent , context ::getMetaEntity ) );
428
- if ( metaEntity .isInitialized () ) {
429
- context .addMetaAuxiliary ( metaEntity .getQualifiedName (), metaEntity );
430
- }
431
- // otherwise discard it (assume it has query by magical method name stuff)
432
- }
433
- }
434
- else {
435
- for ( Element member : typeElement .getEnclosedElements () ) {
436
- if ( hasAnnotation ( member , HQL , SQL , FIND ) ) {
437
- context .logMessage ( Diagnostic .Kind .OTHER , "Processing annotated class '" + element + "'" );
438
- final AnnotationMetaEntity metaEntity =
439
- AnnotationMetaEntity .create ( typeElement , context ,
440
- parentMetadata ( parent , context ::getMetaEntity ) );
441
- context .addMetaAuxiliary ( metaEntity .getQualifiedName (), metaEntity );
442
- break ;
443
- }
444
- }
445
- if ( enclosesEntityOrEmbeddable ( element ) ) {
446
- final NonManagedMetamodel metaEntity =
447
- NonManagedMetamodel .create ( typeElement , context , false ,
448
- parentMetadata ( parent , context ::getMetamodel ) );
449
- context .addMetaEntity ( metaEntity .getQualifiedName (), metaEntity );
450
- if ( context .generateJakartaDataStaticMetamodel () ) {
451
- final NonManagedMetamodel dataMetaEntity =
452
- NonManagedMetamodel .create ( typeElement , context , true ,
453
- parentMetadata ( parent , context ::getDataMetaEntity ) );
454
- context .addDataMetaEntity ( dataMetaEntity .getQualifiedName (), dataMetaEntity );
455
- }
456
-
457
- }
458
- }
459
- }
460
- if ( isClassRecordOrInterfaceType ( element ) ) {
461
- for ( final Element child : element .getEnclosedElements () ) {
462
- if ( isClassRecordOrInterfaceType ( child ) ) {
463
- processElement ( child , element );
464
- }
465
- }
466
- }
401
+ inspectRootElement (element , parent , null );
467
402
}
468
403
catch ( ProcessLaterException processLaterException ) {
469
404
if ( element instanceof TypeElement typeElement ) {
@@ -493,6 +428,77 @@ private boolean hasPackageAnnotation(Element element, String annotation) {
493
428
return pack != null && hasAnnotation ( pack , annotation );
494
429
}
495
430
431
+ private void inspectRootElement (Element element , @ Nullable Element parent , @ Nullable TypeElement primaryEntity ) {
432
+ if ( !included ( element )
433
+ || hasAnnotation ( element , Constants .EXCLUDE )
434
+ || hasPackageAnnotation ( element , Constants .EXCLUDE )
435
+ || element .getModifiers ().contains ( Modifier .PRIVATE ) ) {
436
+ // skip it completely
437
+ return ;
438
+ }
439
+ else if ( isEntityOrEmbeddable ( element )
440
+ && !element .getModifiers ().contains ( Modifier .PRIVATE ) ) {
441
+ context .logMessage ( Diagnostic .Kind .OTHER , "Processing annotated entity class '" + element + "'" );
442
+ handleRootElementAnnotationMirrors ( element , parent );
443
+ }
444
+ else if ( hasAuxiliaryAnnotations ( element ) ) {
445
+ context .logMessage ( Diagnostic .Kind .OTHER , "Processing annotated class '" + element + "'" );
446
+ handleRootElementAuxiliaryAnnotationMirrors ( element );
447
+ }
448
+ else if ( element instanceof TypeElement typeElement ) {
449
+ final AnnotationMirror repository = getAnnotationMirror ( element , JD_REPOSITORY );
450
+ if ( repository != null ) {
451
+ final AnnotationValue provider = getAnnotationValue ( repository , "provider" );
452
+ if ( provider == null
453
+ || provider .getValue ().toString ().isEmpty ()
454
+ || provider .getValue ().toString ().equalsIgnoreCase ("hibernate" ) ) {
455
+ context .logMessage ( Diagnostic .Kind .OTHER , "Processing repository class '" + element + "'" );
456
+ final AnnotationMetaEntity metaEntity =
457
+ AnnotationMetaEntity .create ( typeElement , context ,
458
+ parentMetadata ( parent , context ::getMetaEntity ),
459
+ primaryEntity );
460
+ if ( metaEntity .isInitialized () ) {
461
+ context .addMetaAuxiliary ( metaEntity .getQualifiedName (), metaEntity );
462
+ }
463
+ // otherwise discard it (assume it has query by magical method name stuff)
464
+ }
465
+ }
466
+ else {
467
+ for ( Element member : typeElement .getEnclosedElements () ) {
468
+ if ( hasAnnotation ( member , HQL , SQL , FIND ) ) {
469
+ context .logMessage ( Diagnostic .Kind .OTHER , "Processing annotated class '" + element + "'" );
470
+ final AnnotationMetaEntity metaEntity =
471
+ AnnotationMetaEntity .create ( typeElement , context ,
472
+ parentMetadata ( parent , context ::getMetaEntity ),
473
+ primaryEntity );
474
+ context .addMetaAuxiliary ( metaEntity .getQualifiedName (), metaEntity );
475
+ break ;
476
+ }
477
+ }
478
+ if ( enclosesEntityOrEmbeddable ( element ) ) {
479
+ final NonManagedMetamodel metaEntity =
480
+ NonManagedMetamodel .create ( typeElement , context , false ,
481
+ parentMetadata ( parent , context ::getMetamodel ) );
482
+ context .addMetaEntity ( metaEntity .getQualifiedName (), metaEntity );
483
+ if ( context .generateJakartaDataStaticMetamodel () ) {
484
+ final NonManagedMetamodel dataMetaEntity =
485
+ NonManagedMetamodel .create ( typeElement , context , true ,
486
+ parentMetadata ( parent , context ::getDataMetaEntity ) );
487
+ context .addDataMetaEntity ( dataMetaEntity .getQualifiedName (), dataMetaEntity );
488
+ }
489
+
490
+ }
491
+ }
492
+ }
493
+ if ( isClassRecordOrInterfaceType ( element ) ) {
494
+ for ( final Element child : element .getEnclosedElements () ) {
495
+ if ( isClassRecordOrInterfaceType ( child ) ) {
496
+ processElement ( child , element );
497
+ }
498
+ }
499
+ }
500
+ }
501
+
496
502
private void createMetaModelClasses () {
497
503
498
504
for ( Metamodel aux : context .getMetaAuxiliaries () ) {
@@ -644,6 +650,7 @@ private void handleRootElementAnnotationMirrors(final Element element, @Nullable
644
650
final TypeElement typeElement = (TypeElement ) element ;
645
651
indexEntityName ( typeElement );
646
652
indexEnumFields ( typeElement );
653
+ indexQueryInterfaces ( typeElement );
647
654
648
655
final String qualifiedName = typeElement .getQualifiedName ().toString ();
649
656
final Metamodel alreadyExistingMetaEntity =
@@ -700,6 +707,14 @@ private static boolean hasHandwrittenMetamodel(Element element) {
700
707
.contentEquals ('_' + element .getSimpleName ().toString ()));
701
708
}
702
709
710
+ private void indexQueryInterfaces (TypeElement typeElement ) {
711
+ for ( Element element : typeElement .getEnclosedElements () ) {
712
+ if ( element .getKind () == ElementKind .INTERFACE ) {
713
+ inspectRootElement ( element , typeElement , typeElement );
714
+ }
715
+ }
716
+ }
717
+
703
718
private void indexEntityName (TypeElement typeElement ) {
704
719
final AnnotationMirror mirror = getAnnotationMirror ( typeElement , ENTITY );
705
720
if ( mirror != null ) {
0 commit comments