/Rhino.Etl.Dsl/CompilerSteps/CorrelateTypesToModuleName.cs

http://github.com/ayende/rhino-etl · C# · 54 lines · 29 code · 5 blank · 20 comment · 2 complexity · f9c54c41871bfbe8c2146c8273da77f1 MD5 · raw file

  1. namespace Rhino.Etl.Dsl.CompilerSteps
  2. {
  3. using System.Collections.Generic;
  4. using Boo.Lang.Compiler.Steps;
  5. /// <summary>
  6. /// Correlate between the types defined in a module and their module.
  7. /// This is required to get batch compilation working.
  8. /// </summary>
  9. public class CorrelateTypesToModuleName : AbstractVisitorCompilerStep
  10. {
  11. private readonly IDictionary<string, IList<string>> moduleNameToContainedTypes;
  12. private string currentModule;
  13. /// <summary>
  14. /// Initializes a new instance of the <see cref="CorrelateTypesToModuleName"/> class.
  15. /// </summary>
  16. /// <param name="moduleNameToContainedTypes">The module name to contained types.</param>
  17. public CorrelateTypesToModuleName(IDictionary<string, IList<string>> moduleNameToContainedTypes)
  18. {
  19. this.moduleNameToContainedTypes = moduleNameToContainedTypes;
  20. }
  21. /// <summary>
  22. /// Runs this instance.
  23. /// </summary>
  24. public override void Run()
  25. {
  26. Visit(CompileUnit);
  27. }
  28. /// <summary>
  29. /// Enters the module.
  30. /// </summary>
  31. /// <param name="node">The node.</param>
  32. /// <returns></returns>
  33. public override bool EnterModule(Boo.Lang.Compiler.Ast.Module node)
  34. {
  35. currentModule = node.Name;
  36. if (moduleNameToContainedTypes.ContainsKey(currentModule) == false)
  37. moduleNameToContainedTypes[currentModule] = new List<string>();
  38. return base.EnterModule(node);
  39. }
  40. /// <summary>
  41. /// Called when a class definition node is found
  42. /// </summary>
  43. /// <param name="node">The node.</param>
  44. public override void OnClassDefinition(Boo.Lang.Compiler.Ast.ClassDefinition node)
  45. {
  46. moduleNameToContainedTypes[currentModule].Add(node.Name);
  47. }
  48. }
  49. }