docs: @Override
      public JType apply(String nodeName, JsonNode node, JsonNode parent, JPackage _package, Schema schema) {
  
          JType superType = reflectionHelper.getSuperType(nodeName, node, _package, schema);
          if (superType.isPrimitive() || reflectionHelper.isFinal(superType)) {
              return superType;
          }
  
          JDefinedClass jclass;
          try {
              jclass = createClass(nodeName, node, _package);
          } catch (ClassAlreadyExistsException e) {
              return e.getExistingClass();
          }
  
          jclass._extends((JClass) superType);
  
          schema.setJavaTypeIfEmpty(jclass);
  
          if (node.has("title")) {
              ruleFactory.getTitleRule().apply(nodeName, node.get("title"), node, jclass, schema);
          }
  
          if (node.has("description")) {
              ruleFactory.getDescriptionRule().apply(nodeName, node.get("description"), node, jclass, schema);
          }
  
          // Creates the class definition for the builder
          if(ruleFactory.getGenerationConfig().isGenerateBuilders() && ruleFactory.getGenerationConfig().isUseInnerClassBuilders()){
              ruleFactory.getBuilderRule().apply(nodeName, node, parent, jclass, schema);
          }
  
          ruleFactory.getPropertiesRule().apply(nodeName, node.get("properties"), node, jclass, schema);
  
          if (node.has("javaInterfaces")) {
              addInterfaces(jclass, node.get("javaInterfaces"));
          }
  
          ruleFactory.getAdditionalPropertiesRule().apply(nodeName, node.get("additionalProperties"), node, jclass, schema);
  
          ruleFactory.getDynamicPropertiesRule().apply(nodeName, node.get("properties"), node, jclass, schema);
  
          if (node.has("required")) {
              ruleFactory.getRequiredArrayRule().apply(nodeName, node.get("required"), node, jclass, schema);
          }
  
          if (ruleFactory.getGenerationConfig().isIncludeToString()) {
              addToString(jclass);
          }
  
          if (ruleFactory.getGenerationConfig().isIncludeHashcodeAndEquals()) {
              addHashCode(jclass, node);
              addEquals(jclass, node);
          }
  
          if (ruleFactory.getGenerationConfig().isParcelable()) {
              addParcelSupport(jclass);
          }
  
          if (ruleFactory.getGenerationConfig().isIncludeConstructors()) {
              ruleFactory.getConstructorRule().apply(nodeName, node, parent, jclass, schema);
  
          }
  
          if (ruleFactory.getGenerationConfig().isSerializable()) {
              SerializableHelper.addSerializableSupport(jclass);
          }
  
          return jclass;
  
      }