code: public boolean inherits(ASTType astType, ASTType inheritable) {
          if (astType == null) {
              return false;
          }
          if(inheritable == null || inheritable.equals(OBJECT_TYPE)){
              return true;
          }
          if (astType.equals(inheritable)) {
              return true;
          }
          for (ASTType typeInterfaces : astType.getInterfaces()) {
              if (inherits(typeInterfaces, inheritable)) {
                  return true;
              }
          }
          return inherits(astType.getSuperClass(), inheritable);
      }
docs: Determines if the given ASTType inherits or extends from the given inheritable ASTType
  
  @param astType     target
  @param inheritable inheritance target
  @return true if the given astType target inherits from the inheritable type with the given rules.