private static void RegisterCustomNodeTypes(PluginInfo pluginInfo) { Contract.Requires(pluginInfo != null); var customNodeTypes = pluginInfo.Interface.GetCustomNodeTypes(); if (customNodeTypes == null) { return; } if (customNodeTypes.NodeTypes == null || customNodeTypes.Serializer == null || customNodeTypes.CodeGenerator == null) { throw new ArgumentException(); // TODO } foreach (var nodeType in customNodeTypes.NodeTypes) { if (!nodeType.IsSubclassOf(typeof(BaseNode))) { throw new ArgumentException($"Type '{nodeType}' is not a valid node."); } } pluginInfo.CustomNodeTypes = customNodeTypes; NodeTypesBuilder.AddPluginNodeGroup(pluginInfo.Interface, customNodeTypes.NodeTypes); CustomNodeSerializer.Add(customNodeTypes.Serializer); CppCodeGenerator.Add(customNodeTypes.CodeGenerator); }
private static void DeregisterCustomNodeTypes(PluginInfo pluginInfo) { Contract.Requires(pluginInfo != null); if (pluginInfo.CustomNodeTypes == null) { return; } NodeTypesBuilder.RemovePluginNodeGroup(pluginInfo.Interface); CustomNodeSerializer.Remove(pluginInfo.CustomNodeTypes.Serializer); CppCodeGenerator.Remove(pluginInfo.CustomNodeTypes.CodeGenerator); }