@@ -129,12 +129,11 @@ protected TypeMirror defaultAction(TypeMirror e, Void aVoid) {
129129 }
130130
131131 public static @ Nullable TypeElement getSuperclassTypeElement (TypeElement element ) {
132- final TypeMirror superClass = element .getSuperclass ();
132+ final TypeMirror superclass = element .getSuperclass ();
133133 //superclass of Object is of NoType which returns some other kind
134- if ( superClass .getKind () == TypeKind .DECLARED ) {
135- //F..king Ch...t Have those people used their horrible APIs even once?
136- final Element superClassElement = ( (DeclaredType ) superClass ).asElement ();
137- return (TypeElement ) superClassElement ;
134+ if ( superclass .getKind () == TypeKind .DECLARED ) {
135+ final DeclaredType declaredType = (DeclaredType ) superclass ;
136+ return (TypeElement ) declaredType .asElement ();
138137 }
139138 else {
140139 return null ;
@@ -466,14 +465,11 @@ private static void setDefaultAccessTypeForMappedSuperclassesInHierarchy(TypeEle
466465 }
467466
468467 private static @ Nullable AccessType getAccessTypeOfIdAnnotation (Element element ) {
469- switch ( element .getKind () ) {
470- case FIELD :
471- return AccessType .FIELD ;
472- case METHOD :
473- return AccessType .PROPERTY ;
474- default :
475- return null ;
476- }
468+ return switch ( element .getKind () ) {
469+ case FIELD -> AccessType .FIELD ;
470+ case METHOD -> AccessType .PROPERTY ;
471+ default -> null ;
472+ };
477473 }
478474
479475 private static boolean isIdAnnotation (AnnotationMirror annotationMirror ) {
@@ -522,26 +518,17 @@ public static boolean isClassOrRecordType(Element element) {
522518 }
523519
524520 public static boolean primitiveClassMatchesKind (Class <?> itemType , TypeKind kind ) {
525- switch (kind ) {
526- case SHORT :
527- return itemType .equals (Short .class );
528- case INT :
529- return itemType .equals (Integer .class );
530- case LONG :
531- return itemType .equals (Long .class );
532- case BOOLEAN :
533- return itemType .equals (Boolean .class );
534- case FLOAT :
535- return itemType .equals (Float .class );
536- case DOUBLE :
537- return itemType .equals (Double .class );
538- case CHAR :
539- return itemType .equals (Character .class );
540- case BYTE :
541- return itemType .equals (Byte .class );
542- default :
543- return false ;
544- }
521+ return switch ( kind ) {
522+ case SHORT -> itemType .equals ( Short .class );
523+ case INT -> itemType .equals ( Integer .class );
524+ case LONG -> itemType .equals ( Long .class );
525+ case BOOLEAN -> itemType .equals ( Boolean .class );
526+ case FLOAT -> itemType .equals ( Float .class );
527+ case DOUBLE -> itemType .equals ( Double .class );
528+ case CHAR -> itemType .equals ( Character .class );
529+ case BYTE -> itemType .equals ( Byte .class );
530+ default -> false ;
531+ };
545532 }
546533
547534 public static boolean isPropertyGetter (ExecutableType executable , Element element ) {
@@ -602,7 +589,7 @@ else if ( element.getKind() == ElementKind.METHOD ) {
602589 return elementsUtil .getName (decapitalize (name .substring (3 ))).toString ();
603590 }
604591 else if ( name .startsWith ( "is" ) ) {
605- return ( elementsUtil .getName (decapitalize (name .substring (2 ) ))).toString ();
592+ return elementsUtil .getName (decapitalize (name .substring (2 ))).toString ();
606593 }
607594 return elementsUtil .getName (decapitalize (name )).toString ();
608595 }
@@ -613,8 +600,7 @@ else if ( name.startsWith( "is" ) ) {
613600
614601 public static @ Nullable String findMappedSuperClass (Metamodel entity , Context context ) {
615602 final Element element = entity .getElement ();
616- if ( element instanceof TypeElement ) {
617- final TypeElement typeElement = (TypeElement ) element ;
603+ if ( element instanceof TypeElement typeElement ) {
618604 TypeMirror superClass = typeElement .getSuperclass ();
619605 //superclass of Object is of NoType which returns some other kind
620606 while ( superClass .getKind () == TypeKind .DECLARED ) {
@@ -654,6 +640,33 @@ private static boolean extendsSuperMetaModel(Element superClassElement, boolean
654640 || !entityMetaComplete && containsAnnotation ( superClassElement , ENTITY , MAPPED_SUPERCLASS );
655641 }
656642
643+ public static boolean implementsInterface (TypeElement type , String interfaceName ) {
644+ for ( TypeMirror iface : type .getInterfaces () ) {
645+ if ( iface .getKind () == TypeKind .DECLARED ) {
646+ final DeclaredType declaredType = (DeclaredType ) iface ;
647+ final TypeElement typeElement = (TypeElement ) declaredType .asElement ();
648+ if ( typeElement .getQualifiedName ().contentEquals ( interfaceName )
649+ || implementsInterface ( typeElement , interfaceName ) ) {
650+ return true ;
651+ }
652+ }
653+ }
654+ return false ;
655+ }
656+
657+ public static boolean extendsClass (TypeElement type , String className ) {
658+ TypeMirror superclass = type .getSuperclass ();
659+ while ( superclass != null && superclass .getKind () == TypeKind .DECLARED ) {
660+ final DeclaredType declaredType = (DeclaredType ) superclass ;
661+ final TypeElement typeElement = (TypeElement ) declaredType .asElement ();
662+ if ( typeElement .getQualifiedName ().contentEquals ( className ) ) {
663+ return true ;
664+ }
665+ superclass = typeElement .getSuperclass ();
666+ }
667+ return false ;
668+ }
669+
657670 static class EmbeddedAttributeVisitor extends SimpleTypeVisitor8 <@ Nullable TypeElement , Element > {
658671 private final Context context ;
659672
@@ -665,7 +678,7 @@ static class EmbeddedAttributeVisitor extends SimpleTypeVisitor8<@Nullable TypeE
665678 public @ Nullable TypeElement visitDeclared (DeclaredType declaredType , Element element ) {
666679 final TypeElement returnedElement = (TypeElement )
667680 context .getTypeUtils ().asElement ( declaredType );
668- return containsAnnotation ( NullnessUtil . castNonNull ( returnedElement ), EMBEDDABLE ) ? returnedElement : null ;
681+ return containsAnnotation ( castNonNull ( returnedElement ), EMBEDDABLE ) ? returnedElement : null ;
669682 }
670683
671684 @ Override
0 commit comments