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