예제 #1
0
 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}"));
     }
 }
예제 #2
0
 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}"));
     }
 }