#include "UmlAttribute.h" #include "FileOut.h" #include "UmlClass.h" #include "CppSettings.h" #include "JavaSettings.h" void UmlAttribute::write(FileOut & out) { switch (_lang) { case Uml: out.indent(); out << "\n"; out.indent(+1); const UmlTypeSpec & t = type(); QCString stp = parent()->stereotype(); switch (_lang) { case Uml: if ((stp == "enum") || (stp == "enum_pattern")) { UmlTypeSpec ts; ts.type = (UmlClass *) parent(); UmlItem::write_type(out, ts); } else UmlItem::write_type(out, t); break; case Cpp: if ((t.type != 0) || !t.explicit_type.isEmpty()) write_cpp_type(out); else if ((stp == "enum") || (stp == "enum_pattern")) { UmlTypeSpec ts; ts.type = (UmlClass *) parent(); UmlItem::write_type(out, ts); } break; default: // java if ((t.type != 0) || !t.explicit_type.isEmpty()) write_java_type(out); else if ((stp == "enum") || (stp == "enum_pattern")) { UmlTypeSpec ts; ts.type = (UmlClass *) parent(); UmlItem::write_type(out, ts); } } write_multiplicity(out, multiplicity()); write_default_value(out, defaultValue()); write_annotation(out); write_description_properties(out); out.indent(-1); out.indent(); out << "\n"; unload(); } void UmlAttribute::write_cpp_type(FileOut & out) { // note : doesn't manage function/operation pointer QCString s = cppDecl(); int index; remove_comments(s); // remove keywords not linked to the type if ((index = s.find("${static}")) != -1) s.replace(index, 9, " "); if ((index = s.find("${mutable}")) != -1) s.replace(index, 10, (isCppMutable()) ? "mutable " : ""); if ((index = s.find("${volatile}")) != -1) s.replace(index, 11, (isVolatile()) ? "volatile " : ""); if ((index = s.find("${value}")) != -1) s.replace(index, 8, " "); if ((index = s.find("${h_value}")) != -1) s.replace(index, 10, " "); // replace keywords linked to the type if ((index = s.find("${const}")) != -1) s.replace(index, 8, isReadOnly() ? "const " : ""); UmlTypeSpec t = type(); if (t.type == 0) t.explicit_type = CppSettings::type(t.explicit_type); out.indent(); out << "\n"; } void UmlAttribute::write_java_type(FileOut & out) { QCString s = javaDecl(); int index; remove_comments(s); // remove keywords not linked to the type if ((index = s.find("${visibility}")) != -1) s.replace(index, 13, " "); if ((index = s.find("${static}")) != -1) s.replace(index, 9, " "); if ((index = s.find("${final}")) != -1) s.replace(index, 8, " "); if ((index = s.find("${transient}")) != -1) s.replace(index, 12, " "); if ((index = s.find("${volatile}")) != -1) s.replace(index, 11, " "); if ((index = s.find("${value}")) != -1) s.replace(index, 8, " "); if ((index = s.find("${@}")) != -1) s.replace(index, 4, " "); UmlTypeSpec t = type(); if (t.type == 0) t.explicit_type = JavaSettings::type(t.explicit_type); out.indent(); out << "\n"; }