public static void UsingPlugin(string pluginName, ScopeSymbolTable currentScope, string moduleName) { if (Plugins.ContainsKey(pluginName)) { IPlugin plugin = Plugins[pluginName]; if (ModelManager.ExtendedModelTypePool.ContainsKey(moduleName)) { throw logger.Error(new PluginException(plugin, $"Cannot using {moduleName} since the same plugin has already exists.")); } else { ModelManager.ExtendedModelTypePool.Add(moduleName, plugin.ModelTypePool); } ScopeSymbolTable pluginScope = new ScopeSymbolTable(plugin.ReferenceName, currentScope.scopeLevel + 1, currentScope); TypeSymbol scopeType = currentScope.Lookup("SCOPE") as TypeSymbol; TypeSymbol modelType = currentScope.Lookup("MODEL") as TypeSymbol; foreach (string modelName in plugin.ModelTypePool.Keys) { ScopedModelType scopedModelType = new ScopedModelType() { ModelName = modelName, ScopeName = moduleName }; pluginScope.Insert(new TypeSymbol(modelName, modelType, scopedModelType)); } ScopeSymbol scopeSymbol = new ScopeSymbol(moduleName, scopeType, pluginScope); if (!currentScope.Insert(scopeSymbol, false)) { throw logger.Error(new PluginException(plugin, $"Cannot using {moduleName} since the same symbol has already exists.")); } } else { throw logger.Error(new NotFoundException($"Plugin {pluginName}")); } }
public static void ImportPlugin(string pluginName, ScopeSymbolTable currentScope, IEnumerable <string> items = null) { if (Plugins.ContainsKey(pluginName)) { IPlugin plugin = Plugins[pluginName]; if (ModelManager.ExtendedModelTypePool.ContainsKey(pluginName)) { throw logger.Error(new PluginException(plugin, $"Cannot import {pluginName} since the same plugin has already exists.")); } else { ModelManager.ExtendedModelTypePool.Add(pluginName, plugin.ModelTypePool); } items = items ?? plugin.ModelTypePool.Keys; TypeSymbol modelType = currentScope.Lookup("MODEL") as TypeSymbol; foreach (string modelName in items) { if (!plugin.ModelTypePool.ContainsKey(modelName)) { throw logger.Error(new PluginException(plugin, $"No model named {modelName}")); } ScopedModelType scopedModelType = new ScopedModelType() { ModelName = modelName, ScopeName = pluginName }; if (!currentScope.Insert(new TypeSymbol(modelName, modelType, scopedModelType), false)) { throw logger.Error(new PluginException(plugin, $"Cannot import model {modelName} since the same symbol has already existed.")); } } } else { throw logger.Error(new NotFoundException($"Plugin {pluginName}")); } }