docs: @Override
      public JDefinedClass apply(String nodeName, JsonNode node, JsonNode parent, JDefinedClass jclass, Schema schema) {
          String propertyName = ruleFactory.getNameHelper().getPropertyName(nodeName, node);
  
          JType propertyType = ruleFactory.getSchemaRule().apply(nodeName, node, parent, jclass, schema);
  
          boolean isIncludeGetters = ruleFactory.getGenerationConfig().isIncludeGetters();
          boolean isIncludeSetters = ruleFactory.getGenerationConfig().isIncludeSetters();
  
          node = resolveRefs(node, schema);
  
          int accessModifier = isIncludeGetters || isIncludeSetters ? JMod.PRIVATE : JMod.PUBLIC;
          JFieldVar field = jclass.field(accessModifier, propertyType, propertyName);
  
          propertyAnnotations(nodeName, node, schema, field);
  
          formatAnnotation(field, jclass, node);
  
          ruleFactory.getAnnotator().propertyField(field, jclass, nodeName, node);
  
          if (isIncludeGetters) {
              JMethod getter = addGetter(jclass, field, nodeName, node, isRequired(nodeName, node, schema), useOptional(nodeName, node, schema));
              ruleFactory.getAnnotator().propertyGetter(getter, jclass, nodeName);
              propertyAnnotations(nodeName, node, schema, getter);
          }
  
          if (isIncludeSetters) {
              JMethod setter = addSetter(jclass, field, nodeName, node);
              ruleFactory.getAnnotator().propertySetter(setter, jclass, nodeName);
              propertyAnnotations(nodeName, node, schema, setter);
          }
  
          if (ruleFactory.getGenerationConfig().isGenerateBuilders()) {
              addBuilderMethod(jclass, field, nodeName, node);
          }
  
          if (node.has("pattern")) {
              ruleFactory.getPatternRule().apply(nodeName, node.get("pattern"), node, field, schema);
          }
  
          ruleFactory.getDefaultRule().apply(nodeName, node.get("default"), node, field, schema);
  
          ruleFactory.getMinimumMaximumRule().apply(nodeName, node, parent, field, schema);
  
          ruleFactory.getMinItemsMaxItemsRule().apply(nodeName, node, parent, field, schema);
  
          ruleFactory.getMinLengthMaxLengthRule().apply(nodeName, node, parent, field, schema);
  
          if (isObject(node) || isArray(node)) {
              ruleFactory.getValidRule().apply(nodeName, node, parent, field, schema);
          }
  
          return jclass;
      }