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())));
     }
 }