protected void createAttribute( IClass clazz, Type type, MemberdefType memberdefType, IClass findClass, boolean isAssociation) throws InvalidEditingException { IAttribute attribute = null; boolean memberEnd = false; if (LanguageManager.PRIMITIVE_TYPE.contains(type.getNamespaceClass().clazz)) { attribute = this.basicModelEditor.createAttribute( clazz, type.getName(), type.getNamespaceClass().clazz); } else if (!isEmpty(type.getTemplates())) { attribute = this.basicModelEditor.createAttribute( clazz, type.getName(), astahModelUtil.clearNamespace(type.getTemplateParameter())); } else { if (findClass == null) { if (type.getNamespaceClass() != null && !isEmpty(type.getNamespaceClass().clazz)) { IPackage pkg = this.astahModelUtil.getModelWithPath( IPackage.class, project, type.getNamespaceClass().namespace); if (pkg == null) { pkg = project; } findClass = this.basicModelEditor.createClass(pkg, type.getNamespaceClass().clazz); if (isAssociation) { attribute = this.createAssosiation(clazz, type, findClass); memberEnd = true; } else { attribute = this.basicModelEditor.createAttribute(clazz, type.getName(), findClass); } } } else { if (isAssociation) { attribute = this.createAssosiation(clazz, type, findClass); memberEnd = true; } else { attribute = this.basicModelEditor.createAttribute(clazz, type.getName(), findClass); } } } if (attribute == null) { return; } this.setLanguage(CPLUS_ATTRIBUTE, attribute); // 属性のその他属性を作成 attribute.setStatic(type.isStatic()); attribute.setVisibility(type.getVisiblity()); attribute.setDefinition(this.parseDescription(memberdefType.getDetaileddescription())); if (!isEmpty(type.getTypeModifier())) { attribute.setTypeModifier(type.getTypeModifier()); } if (!memberEnd && type.isConst()) { this.createTaggedValue(attribute, "jude.c_plus.const", "true"); } if (!memberEnd && type.isVolatile()) { this.createTaggedValue(attribute, "jude.c_plus.volatile", "true"); } if (!memberEnd && type.isMutable()) { this.createTaggedValue(attribute, "jude.c_plus.mutable", "true"); } }
private IAttribute createAssosiation(IClass clazz, Type type, IClass findClass) throws InvalidEditingException { IAttribute attribute; IAssociation association = this.basicModelEditor.createAssociation(clazz, findClass, "", "", type.getName()); IAttribute[] memberEnds = association.getMemberEnds(); attribute = memberEnds[0]; memberEnds[1].setNavigability("Navigable"); attribute.setNavigability("Non_Navigable"); return attribute; }
protected void createEnum(CompounddefType compounddefType, INamedElement element) throws InvalidEditingException { List<SectiondefType> sectiondefTypes = compounddefType.getSectiondef(); for (SectiondefType sectiondefType : sectiondefTypes) { List<MemberdefType> memberdefTypes = sectiondefType.getMemberdef(); for (MemberdefType memberdefType : memberdefTypes) { if (memberdefType.getKind() != DoxMemberKind.ENUM) { continue; } Type type = this.typeUtil.createEnumType(memberdefType); IClass enumClass = null; try { if (element instanceof IPackage) { enumClass = this.basicModelEditor.createClass((IPackage) element, type.getName()); } else if (element instanceof IClass) { enumClass = this.basicModelEditor.createClass((IClass) element, type.getName()); } } catch (InvalidEditingException e) { // グローバルで同名は存在するので無視する if (!e.getKey().equals(InvalidEditingException.NAME_DOUBLE_ERROR_KEY)) { throw e; } } if (enumClass == null) { break; } enumClass.addStereotype(STEREOTYPE_ENUM); enumClass.setVisibility(type.getVisiblity()); List<EnumvalueType> enumvalues = memberdefType.getEnumvalue(); if (enumvalues == null) { break; } for (EnumvalueType enumvalue : enumvalues) { Type enumtype = this.typeUtil.createEnumType(enumvalue); try { IAttribute enumAttribute = this.basicModelEditor.createAttribute(enumClass, enumtype.getName(), enumClass); enumAttribute.setVisibility(enumtype.getVisiblity()); enumAttribute.setInitialValue(enumtype.getInitialValue()); // enum なので static とする enumAttribute.setStatic(true); } catch (InvalidEditingException e) { // 同じネームスペース名で同じ名前のEnumの中に同じ名前の定数を宣言しているときは例外を出したくない if (!e.getKey().equals(InvalidEditingException.NAME_DOUBLE_ERROR_KEY)) { throw e; } } } } } }