예제 #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TransformManager"/> class.
        /// </summary>
        public TransformManager(
            GlobalNamespaceProvider globalNamespace,
            NamingRulesManager namingRules,
            Logger logger,
            TypeRegistry typeRegistry,
            IDocumentationLinker docLinker,
            ConstantManager constantManager,
            AssemblyManager assemblyManager)
        {
            GlobalNamespace          = globalNamespace;
            Logger                   = logger;
            NamingRules              = namingRules;
            this.docLinker           = docLinker;
            this.typeRegistry        = typeRegistry;
            this.constantManager     = constantManager;
            this.assemblyManager     = assemblyManager;
            namespaceRegistry        = new NamespaceRegistry(logger, assemblyManager);
            marshalledElementFactory = new MarshalledElementFactory(Logger, GlobalNamespace, typeRegistry);

            EnumTransform = new EnumTransform(namingRules, logger, namespaceRegistry, typeRegistry);

            StructTransform = new StructTransform(namingRules, logger, namespaceRegistry, typeRegistry, marshalledElementFactory);

            FunctionTransform = new MethodTransform(namingRules, logger, groupRegistry, marshalledElementFactory, globalNamespace, typeRegistry);

            InterfaceTransform = new InterfaceTransform(namingRules, logger, globalNamespace, FunctionTransform, FunctionTransform, typeRegistry, namespaceRegistry);
        }
예제 #2
0
        private void ProcessMappings(CppElementFinder elementFinder, ConfigFile file)
        {
            // Perform all mappings from <mappings> tag
            foreach (var configRule in file.Mappings)
            {
                var ruleUsed = false;
                if (configRule is MappingRule mappingRule)
                {
                    if (mappingRule.Enum != null)
                    {
                        ruleUsed = elementFinder.ExecuteRule <CppEnum>(mappingRule.Enum, mappingRule);
                    }
                    else if (mappingRule.EnumItem != null)
                    {
                        ruleUsed = elementFinder.ExecuteRule <CppEnumItem>(mappingRule.EnumItem, mappingRule);
                    }
                    else if (mappingRule.Struct != null)
                    {
                        ruleUsed = elementFinder.ExecuteRule <CppStruct>(mappingRule.Struct, mappingRule);
                    }
                    else if (mappingRule.Field != null)
                    {
                        ruleUsed = elementFinder.ExecuteRule <CppField>(mappingRule.Field, mappingRule);
                    }
                    else if (mappingRule.Interface != null)
                    {
                        ruleUsed = elementFinder.ExecuteRule <CppInterface>(mappingRule.Interface, mappingRule);
                    }
                    else if (mappingRule.Function != null)
                    {
                        ruleUsed = elementFinder.ExecuteRule <CppFunction>(mappingRule.Function, mappingRule);
                    }
                    else if (mappingRule.Method != null)
                    {
                        ruleUsed = elementFinder.ExecuteRule <CppMethod>(mappingRule.Method, mappingRule);
                    }
                    else if (mappingRule.Parameter != null)
                    {
                        ruleUsed = elementFinder.ExecuteRule <CppParameter>(mappingRule.Parameter, mappingRule);
                    }
                    else if (mappingRule.Element != null)
                    {
                        ruleUsed = elementFinder.ExecuteRule <CppElement>(mappingRule.Element, mappingRule);
                    }
                    else if (mappingRule.DocItem != null)
                    {
                        docLinker.AddOrUpdateDocLink(mappingRule.DocItem, mappingRule.MappingNameFinal);
                        ruleUsed = true;
                    }
                }
                else if (configRule is ContextRule contextRule)
                {
                    HandleContextRule(elementFinder, file, contextRule);
                    ruleUsed = true;
                }
                else if (configRule is RemoveRule removeRule)
                {
                    if (removeRule.Enum != null)
                    {
                        ruleUsed = RemoveElements <CppEnum>(elementFinder, removeRule.Enum);
                    }
                    else if (removeRule.EnumItem != null)
                    {
                        ruleUsed = RemoveElements <CppEnumItem>(elementFinder, removeRule.EnumItem);
                    }
                    else if (removeRule.Struct != null)
                    {
                        ruleUsed = RemoveElements <CppStruct>(elementFinder, removeRule.Struct);
                    }
                    else if (removeRule.Field != null)
                    {
                        ruleUsed = RemoveElements <CppField>(elementFinder, removeRule.Field);
                    }
                    else if (removeRule.Interface != null)
                    {
                        ruleUsed = RemoveElements <CppInterface>(elementFinder, removeRule.Interface);
                    }
                    else if (removeRule.Function != null)
                    {
                        ruleUsed = RemoveElements <CppFunction>(elementFinder, removeRule.Function);
                    }
                    else if (removeRule.Method != null)
                    {
                        ruleUsed = RemoveElements <CppMethod>(elementFinder, removeRule.Method);
                    }
                    else if (removeRule.Parameter != null)
                    {
                        ruleUsed = RemoveElements <CppParameter>(elementFinder, removeRule.Parameter);
                    }
                    else if (removeRule.Element != null)
                    {
                        ruleUsed = RemoveElements <CppElement>(elementFinder, removeRule.Element);
                    }
                }
                else if (configRule is MoveRule moveRule)
                {
                    ruleUsed = true;
                    if (moveRule.Struct != null)
                    {
                        StructTransform.MoveStructToInner(moveRule.Struct, moveRule.To);
                    }
                    else if (moveRule.Method != null)
                    {
                        InterfaceTransform.MoveMethodsToInnerInterface(moveRule.Method, moveRule.To, moveRule.Property, moveRule.Base);
                    }
                }

                if (!ruleUsed)
                {
                    Logger.Warning(LoggingCodes.UnusedMappingRule, "Mapping rule [{0}] did not match any elements.", configRule);
                }
            }
        }