private void createOperationOrAttributeFromSectionDefTypes( CompounddefType compounddefType, IClass clazz) throws ProjectNotFoundException, InvalidEditingException { List<SectiondefType> sectiondefTypes = compounddefType.getSectiondef(); for (SectiondefType sectiondefType : sectiondefTypes) { List<MemberdefType> memberdefTypes = sectiondefType.getMemberdef(); for (MemberdefType memberdefType : memberdefTypes) { if (!(memberdefType.getKind() == DoxMemberKind.FUNCTION || memberdefType.getKind() == DoxMemberKind.VARIABLE || memberdefType.getKind() == DoxMemberKind.PROPERTY)) { continue; } Type type = this.typeUtil.createType(memberdefType); try { IClass findClass = this.findClass(type); if (memberdefType.getKind() == DoxMemberKind.FUNCTION) { this.createOperation(clazz, type, memberdefType, findClass); } else if (memberdefType.getKind() == DoxMemberKind.VARIABLE || memberdefType.getKind() == DoxMemberKind.PROPERTY) { this.createAttribute(clazz, type, memberdefType, findClass); } else { LOG.trace(format("ここでは使用しないDoxMemberKind : %s", memberdefType.getKind().toString())); } } catch (InvalidEditingException e) { if (!e.getKey().equals(InvalidEditingException.NAME_DOUBLE_ERROR_KEY)) { throw e; } LOG.info("invalid editing {},{}", clazz.getName(), type.getName()); } } } }
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; } } } } } }
public void modifyGlobalClass(CompounddefType compounddefType) throws InvalidEditingException, ProjectNotFoundException { if (!isCreateGlobalClass(compounddefType)) { return; } Type type = this.typeUtil.createEnumType(compounddefType); IClass findClass = this.findClass(type); if (findClass == null) { return; } // グローバルな属性・関数を作成 List<SectiondefType> sectiondefTypes = compounddefType.getSectiondef(); for (SectiondefType sectiondefType : sectiondefTypes) { if (!isCreateGlobalSectiondefType(sectiondefType)) { continue; } List<MemberdefType> memberdefTypes = sectiondefType.getMemberdef(); for (MemberdefType memberdefType : memberdefTypes) { if (!isCreateGlobalMemberdefType(memberdefType)) { continue; } Type memberType = this.typeUtil.createType(memberdefType); IClass memberdefClass = this.findClass(memberType); if (memberdefType.getKind() == DoxMemberKind.FUNCTION) { this.createOperation(findClass, memberType, memberdefType, memberdefClass); } else if (memberdefType.getKind() == DoxMemberKind.VARIABLE) { try { this.createAttribute(findClass, memberType, memberdefType, memberdefClass, false); } catch (InvalidEditingException e) { // グローバルで同名は存在するので無視する if (!e.getKey().equals(InvalidEditingException.NAME_DOUBLE_ERROR_KEY)) { throw e; } } } } } }
protected boolean isCreateGlobalMemberdefType(MemberdefType memberdefType) { return memberdefType.getKind() == DoxMemberKind.FUNCTION || memberdefType.getKind() == DoxMemberKind.VARIABLE; }