public static void generateImplementation(IndentWriter writer, IXMLElement klass) throws IOException { String superClass = ModelAccessor.getSuperClass(klass); String name = XMLUtil.getAttribute(klass, "name"); if (ModelAccessor.isPredefinedClass(name)) { writer.write("// SKIPPING IMPLEMENTATION FOR BUILT-IN CLASS " + name + "\n\n"); return; } ModelAccessor.setCurrentObjectType(name); String longname = XMLUtil.qualifiedName(klass); boolean extendsBuiltIn = ModelAccessor.isPredefinedClass(superClass); String superCppClass = ModelAccessor.getCppClass(superClass); writer.write("\n"); SharedWriter.generateFileLocation(writer, klass); writer.write( longname + "::" + name + "(const PlanDatabaseId& planDatabase, const LabelStr& name)\n"); if (extendsBuiltIn) writer.write(" : " + superCppClass + "(planDatabase, \"" + name + "\", name, true)"); else writer.write(" : " + superCppClass + "(planDatabase, \"" + name + "\", name)"); writer.write(" {\n"); writer.write("}\n"); writer.write( longname + "::" + name + "(const PlanDatabaseId& planDatabase, const LabelStr& type, const LabelStr& name)\n"); if (extendsBuiltIn) writer.write(" : " + superCppClass + "(planDatabase, type, name, true)"); else writer.write(" : " + superCppClass + "(planDatabase, type, name)"); writer.write(" {\n"); writer.write("}\n"); writer.write(longname + "::" + name + "(const ObjectId& parent, const LabelStr& name)\n"); if (extendsBuiltIn) writer.write(" : " + superCppClass + "(parent, \"" + name + "\", name, true)"); else writer.write(" : " + superCppClass + "(parent, \"" + name + "\", name)"); writer.write(" {}\n"); writer.write( longname + "::" + name + "(const ObjectId& parent, const LabelStr& type, const LabelStr& name)\n"); if (extendsBuiltIn) writer.write(" : " + superCppClass + "(parent, type, name, true)"); else writer.write(" : " + superCppClass + "(parent, type, name)"); writer.write(" {}\n"); Vector classVariables = klass.getChildrenNamed("var"); SharedWriter.defineHandleDefaults(writer, klass, classVariables); generateChildren(writer, klass); ModelAccessor.resetCurrentObjectType(); }