code: public boolean match(TagMask tagMask, boolean restricted) {
      if (tagMask.getClazz() != null) {
        if ((this.getClazzE() != null || restricted)
            && !match( this.getClazzE(), tagMask.getClazz()))
          return false;
      }
  
      if (tagMask.getGender() != null) {
        if ((this.getGenderE() != null || restricted)
            && dontMatch(tagMask.getGender()))
          return false;
      }
  
      if (tagMask.getNumber() != null) {
        if ((this.getNumberE() != null || restricted)
            && dontMatch(tagMask.getNumber()))
          return false;
      }
  
      if (tagMask.getCase() != null) {
        if ((this.getCase() != null || restricted)
            && this.getCase() != tagMask.getCase())
          return false;
      }
  
      if (tagMask.getPerson() != null) {
        if ((this.getPersonE() != null || restricted)
            && dontMatch(tagMask.getPerson()))
          return false;
      }
  
      if (tagMask.getTense() != null) {
        if ((this.getTense() != null || restricted)
            && !match(this.getTense(), tagMask.getTense()))
          return false;
      }
  
      if (tagMask.getMood() != null) {
        if ((this.getMood() != null || restricted)
            && this.getMood() != tagMask.getMood())
          return false;
      }
  
      if (tagMask.getPunctuation() != null) {
        if ((this.getPunctuation() != null || restricted)
            && this.getPunctuation() != tagMask.getPunctuation())
          return false;
      }
  
      return true;
    }
docs: tag doesn't