@@ -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,14 @@ 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+ switch ( element .getKind () ) {
469+ case FIELD :
470+ return AccessType .FIELD ;
471+ case METHOD :
472+ return AccessType .PROPERTY ;
473+ default :
474+ return null ;
475+ }
477476 }
478477
479478 private static boolean isIdAnnotation (AnnotationMirror annotationMirror ) {
@@ -522,26 +521,26 @@ public static boolean isClassOrRecordType(Element element) {
522521 }
523522
524523 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- }
524+ switch (kind ) {
525+ case SHORT :
526+ return itemType .equals (Short .class );
527+ case INT :
528+ return itemType .equals (Integer .class );
529+ case LONG :
530+ return itemType .equals (Long .class );
531+ case BOOLEAN :
532+ return itemType .equals (Boolean .class );
533+ case FLOAT :
534+ return itemType .equals (Float .class );
535+ case DOUBLE :
536+ return itemType .equals (Double .class );
537+ case CHAR :
538+ return itemType .equals (Character .class );
539+ case BYTE :
540+ return itemType .equals (Byte .class );
541+ default :
542+ return false ;
543+ }
545544 }
546545
547546 public static boolean isPropertyGetter (ExecutableType executable , Element element ) {
@@ -602,7 +601,7 @@ else if ( element.getKind() == ElementKind.METHOD ) {
602601 return elementsUtil .getName (decapitalize (name .substring (3 ))).toString ();
603602 }
604603 else if ( name .startsWith ( "is" ) ) {
605- return ( elementsUtil .getName (decapitalize (name .substring (2 ) ))).toString ();
604+ return elementsUtil .getName (decapitalize (name .substring (2 ))).toString ();
606605 }
607606 return elementsUtil .getName (decapitalize (name )).toString ();
608607 }
@@ -614,8 +613,8 @@ else if ( name.startsWith( "is" ) ) {
614613 public static @ Nullable String findMappedSuperClass (Metamodel entity , Context context ) {
615614 final Element element = entity .getElement ();
616615 if ( element instanceof TypeElement ) {
617- final TypeElement typeElement = (TypeElement ) element ;
618- TypeMirror superClass = typeElement .getSuperclass ();
616+ final TypeElement typeElement = (TypeElement ) element ;
617+ TypeMirror superClass = typeElement .getSuperclass ();
619618 //superclass of Object is of NoType which returns some other kind
620619 while ( superClass .getKind () == TypeKind .DECLARED ) {
621620 final DeclaredType declaredType = (DeclaredType ) superClass ;
@@ -654,6 +653,33 @@ private static boolean extendsSuperMetaModel(Element superClassElement, boolean
654653 || !entityMetaComplete && containsAnnotation ( superClassElement , ENTITY , MAPPED_SUPERCLASS );
655654 }
656655
656+ public static boolean implementsInterface (TypeElement type , String interfaceName ) {
657+ for ( TypeMirror iface : type .getInterfaces () ) {
658+ if ( iface .getKind () == TypeKind .DECLARED ) {
659+ final DeclaredType declaredType = (DeclaredType ) iface ;
660+ final TypeElement typeElement = (TypeElement ) declaredType .asElement ();
661+ if ( typeElement .getQualifiedName ().contentEquals ( interfaceName )
662+ || implementsInterface ( typeElement , interfaceName ) ) {
663+ return true ;
664+ }
665+ }
666+ }
667+ return false ;
668+ }
669+
670+ public static boolean extendsClass (TypeElement type , String className ) {
671+ TypeMirror superclass = type .getSuperclass ();
672+ while ( superclass != null && superclass .getKind () == TypeKind .DECLARED ) {
673+ final DeclaredType declaredType = (DeclaredType ) superclass ;
674+ final TypeElement typeElement = (TypeElement ) declaredType .asElement ();
675+ if ( typeElement .getQualifiedName ().contentEquals ( className ) ) {
676+ return true ;
677+ }
678+ superclass = typeElement .getSuperclass ();
679+ }
680+ return false ;
681+ }
682+
657683 static class EmbeddedAttributeVisitor extends SimpleTypeVisitor8 <@ Nullable TypeElement , Element > {
658684 private final Context context ;
659685
@@ -665,7 +691,7 @@ static class EmbeddedAttributeVisitor extends SimpleTypeVisitor8<@Nullable TypeE
665691 public @ Nullable TypeElement visitDeclared (DeclaredType declaredType , Element element ) {
666692 final TypeElement returnedElement = (TypeElement )
667693 context .getTypeUtils ().asElement ( declaredType );
668- return containsAnnotation ( NullnessUtil . castNonNull ( returnedElement ), EMBEDDABLE ) ? returnedElement : null ;
694+ return containsAnnotation ( castNonNull ( returnedElement ), EMBEDDABLE ) ? returnedElement : null ;
669695 }
670696
671697 @ Override
0 commit comments