docs: @Override
      public JDefinedClass apply(String nodeName, JsonNode node, JsonNode parent, JDefinedClass jclass, Schema schema) {
  
          if (node != null && node.isBoolean() && node.asBoolean() == false) {
              // no additional properties allowed
              return jclass;
          }
  
          if (!this.ruleFactory.getGenerationConfig().isIncludeAdditionalProperties()) {
              // no additional properties allowed
              return jclass;
          }
  
          if (!ruleFactory.getAnnotator().isAdditionalPropertiesSupported()) {
              // schema allows additional properties, but serializer library can't support them
              return jclass;
          }
  
          JType propertyType;
          if (node != null && node.size() != 0) {
              propertyType = ruleFactory.getSchemaRule().apply(nodeName + "Property", node, parent, jclass, schema);
          } else {
              propertyType = jclass.owner().ref(Object.class);
          }
  
          JFieldVar field = addAdditionalPropertiesField(jclass, propertyType);
  
          addGetter(jclass, field);
  
          addSetter(jclass, propertyType, field);
  
          if (ruleFactory.getGenerationConfig().isIncludeJsr303Annotations()) {
              ruleFactory.getValidRule().apply(nodeName, node, parent, field, schema);
          }
  
          if (ruleFactory.getGenerationConfig().isGenerateBuilders()) {
              addBuilder(jclass, propertyType, field);
          }
  
          return jclass;
      }