private void ConvertPackage(MetaNamespaceBuilder parentNs, EPackage epkg) { var mns = _factory.MetaNamespace(); mns.Name = epkg.Name.ToPascalCase(); mns.Namespace = parentNs; _map.Add(epkg, mns); if (epkg.NsURI != null) { var metaModel = _factory.MetaModel(); metaModel.Name = epkg.Name.ToPascalCase(); metaModel.Prefix = epkg.NsPrefix; metaModel.Uri = epkg.NsURI; mns.DefinedMetaModel = metaModel; } foreach (var childEpgk in epkg.ESubPackages) { ConvertPackage(mns, childEpgk); } foreach (var childClsf in epkg.EClassifiers) { ConvertClassifier(mns, childClsf); } BindSuperClasses(); BindTypedElements(); CreateAssociations(); }
private void ConvertDataType(MetaNamespaceBuilder parentNs, EDataType edt) { /*var mcst = _factory.MetaConstant(); * parentNs.Declarations.Add(mcst); * _map.Add(edt, mcst);*/ var mpt = _factory.MetaPrimitiveType(); mpt.Name = edt.Name; parentNs.Declarations.Add(mpt); _map.Add(edt, mpt); }
private void ConvertEnum(MetaNamespaceBuilder parentNs, EEnum eenm) { var menm = _factory.MetaEnum(); menm.Name = eenm.Name.ToPascalCase(); parentNs.Declarations.Add(menm); _map.Add(eenm, menm); foreach (var elit in eenm.ELiterals) { var mlit = _factory.MetaEnumLiteral(); mlit.Name = elit.Name.ToPascalCase(); menm.EnumLiterals.Add(mlit); _map.Add(elit, mlit); } }
private void ConvertClass(MetaNamespaceBuilder parentNs, EClass ecls) { var mcls = _factory.MetaClass(); mcls.Name = ecls.Name.ToPascalCase(); mcls.IsAbstract = ecls.Abstract || ecls.Interface; parentNs.Declarations.Add(mcls); _map.Add(ecls, mcls); foreach (var eprop in ecls.EStructuralFeatures) { ConvertProperty(mcls, eprop); } foreach (var eop in ecls.EOperations) { ConvertOperation(mcls, eop); } }
private void ConvertClassifier(MetaNamespaceBuilder parentNs, EClassifier eclsf) { if (eclsf is EClass ecls) { ConvertClass(parentNs, ecls); } else if (eclsf is EEnum eenm) { ConvertEnum(parentNs, eenm); } else if (eclsf is EDataType edt) { ConvertDataType(parentNs, edt); } else { _diagnostics.Add(ModelErrorCode.ERR_ModelConversionError.ToDiagnosticWithNoLocation(string.Format("Unknown EClassifier type: {0}", eclsf.GetType()))); } }