/// <summary> /// add class to project context. /// </summary> /// <param name="tlClass">The tl class.</param> /// <exception cref="FileParseException"> /// </exception> public void AddClass(Types.Class tlClass) { if (this.classes.ContainsKey(tlClass.ClassFullName)) { throw new FileParseException(string.Format("class '{0}' already exist.", tlClass.ClassFullName)); } if (this.packageClasses.ContainsKey(tlClass.ClassFullName)) { throw new FileParseException(string.Format("Threr is already a package '{0}' in the project.", tlClass.ClassFullName)); } Dictionary <string, Types.Class> packageClass; this.packageClasses.TryGetValue(tlClass.PackageName, out packageClass); if (packageClass == null) { packageClass = new Dictionary <string, Types.Class>(); this.packageClasses.Add(tlClass.PackageName, packageClass); } packageClass.Add(tlClass.ClassName, tlClass); this.classes.Add(tlClass.ClassFullName, tlClass); }
public static Project Build(string projectRoot, params string[] classPaths) { var myParser = new TypeLuaParser(); myParser.Setup(); var project = new Project(projectRoot); projectRoot = projectRoot + "\\"; Types.Class tlClass = null; List <Types.Class> classes = new List <Types.Class>(); try { foreach (var classPath in classPaths) { var path = classPath.Replace(projectRoot, ""); path = path.Replace("\\", "/"); var extension = Path.GetExtension(path); if (extension == ".tl") { tlClass = new Types.Class(project, path.Substring(0, path.Length - 3)); var readAllText = File.ReadAllText(classPath); myParser.Parse(new StringReader(readAllText), project, tlClass); classes.Add(tlClass); } else if (extension == ".lua") { var luafile = new Luafile(project, path.Substring(0, path.Length - 4)); project.luafiles[luafile.FullName] = luafile; } } var classParser = new ClassParser(); for (int i = 0; i < classes.Count; i++) { tlClass = classes[i]; tlClass.Packages.PackageList.BuildPackageContext(tlClass.Packages); } for (int i = 0; i < classes.Count; i++) { tlClass = classes[i]; classParser.BuildGlobalContext(tlClass); } for (int i = 0; i < classes.Count; i++) { tlClass = classes[i]; classParser.ClarifyType(tlClass); } for (int i = 0; i < classes.Count; i++) { tlClass = classes[i]; classParser.TypeVerify(tlClass); } } catch (FileParseException e) { e.FileName = tlClass.ClassPath; Console.WriteLine(e.StackTrace); throw e; } return(project); }