Inheritance: ViewModelBase
 public void MakeApp(PrjTreeItemVM aAppVM)
 {
     App.MainViewModel.ErrorLog.Clear();
     var slnCompiler = new SolutionCompiler();
     App.MainViewModel.ErrorCount = 0;
     slnCompiler.CodeFileError += (a, b) =>
     {
         var item = new ErrorInfoVM();
         var spIndex = b.Log.IndexOf(": ");
         if (spIndex == -1)
         {
             item.Log = b.Log;
         }
         else
         {
             var front = b.Log.Substring(0, spIndex);
             var line = front.Substring(front.LastIndexOf(':') + 1, front.Length - front.LastIndexOf(':') - 1);
             var back = b.Log.Substring(spIndex + 1, b.Log.Length - spIndex - 1);
             item.Entity = b.Entity;
             item.Log = back;
             item.Line = line;
         }
         App.MainViewModel.ErrorLog.Add(item);
         App.MainViewModel.ErrorCount++;
     };
     App.MainViewModel.IsCompiling = true;
     slnCompiler.Start(
         new ErlangEditor.Core.Entity.ApplicationEntity[] { aAppVM.Entity as ErlangEditor.Core.Entity.ApplicationEntity },
         App.MainViewModel.ExportLog, null,
         (x) =>
         {
             App.MainViewModel.AutoCompleteCache.ScanAllBin(ErlangEditor.Core.SolutionUtil.Solution);
             Dispatcher.Invoke(new Action(() =>
             {
                 App.MainViewModel.IsCompiling = false;
             }));
         });
 }
 public void MakeTreeLoop(ViewModel.PrjTreeItemVM aParentVM, object aNode)
 {
     var node = new ViewModel.PrjTreeItemVM(aNode);
     if (aNode is ErlangEditor.Core.Entity.SolutionEntity)
     {
         var sln = aNode as ErlangEditor.Core.Entity.SolutionEntity;
         node.DisplayText = sln.Name;
         node.Children = new System.Collections.ObjectModel.ObservableCollection<ViewModel.PrjTreeItemVM>();
     }
     if (aNode is ErlangEditor.Core.Entity.ApplicationEntity)
     {
         var app = aNode as ErlangEditor.Core.Entity.ApplicationEntity;
         node.DisplayText = app.Name;
         node.Children = new System.Collections.ObjectModel.ObservableCollection<ViewModel.PrjTreeItemVM>();
     }
     if (aNode is ErlangEditor.Core.Entity.FolderEntity)
     {
         var fld = aNode as ErlangEditor.Core.Entity.FolderEntity;
         node.DisplayText = fld.Name;
         node.Children = new System.Collections.ObjectModel.ObservableCollection<ViewModel.PrjTreeItemVM>();
     }
     if (aNode is ErlangEditor.Core.Entity.FileEntity)
     {
         var fle = aNode as ErlangEditor.Core.Entity.FileEntity;
         node.DisplayText = fle.DisplayName;
     }
     node.Entity = aNode;
     if (aParentVM == null)
     {
         App.MainViewModel.TreeRoot = new System.Collections.ObjectModel.ObservableCollection<ViewModel.PrjTreeItemVM>();
         App.MainViewModel.TreeRoot.Add(node);
     }
     else if (aNode is ErlangEditor.Core.Entity.FolderEntity && new string[]{"ebin","doc","priv"}.Any(x=> (aNode as ErlangEditor.Core.Entity.FolderEntity).Name == x))
     {
         return;
     }
     else
     {
         aParentVM.Children.Add(node);
     }
     if (aNode is ErlangEditor.Core.Entity.SolutionEntity)
     {
         var sln = aNode as ErlangEditor.Core.Entity.SolutionEntity;
         foreach (var i in sln.Apps)
         {
             MakeTreeLoop(node, i);
         }
     }
     if (aNode is ErlangEditor.Core.Entity.ApplicationEntity)
     {
         var app = aNode as ErlangEditor.Core.Entity.ApplicationEntity;
         foreach (var i in app.Folders)
         {
             MakeTreeLoop(node, i);
         }
         foreach (var i in app.Files)
         {
             MakeTreeLoop(node, i);
         }
     }
     if (aNode is ErlangEditor.Core.Entity.FolderEntity)
     {
         var fld = aNode as ErlangEditor.Core.Entity.FolderEntity;
         foreach (var i in fld.Files)
         {
             MakeTreeLoop(node, i);
         }
     }
     if (!(aNode is ErlangEditor.Core.Entity.FileEntity))
     {
         var comparer = new Tools.Reverser<ViewModel.PrjTreeItemVM>(new ViewModel.PrjTreeItemVM().GetType(), "DisplayText", Tools.ReverserInfo.Direction.ASC);
         var lst = node.Children.ToList();
         lst.Sort(comparer);
         node.Children.Clear();
         foreach (var i in lst)
             node.Children.Add(i);
     }
 }