private void ParserState_ModuleStateChanged(object sender, Parsing.ParseProgressEventArgs e)
        {
            // if we are resolving references, we already have the declarations and don't need to display error
            if (!(e.State == ParserState.Error ||
                  (e.State == ParserState.ResolverError &&
                   e.OldState == ParserState.ResolvingDeclarations)))
            {
                return;
            }

            var components       = e.Component.Collection;
            var componentProject = components.Parent;
            {
                var projectNode = Projects.OfType <CodeExplorerProjectViewModel>()
                                  .FirstOrDefault(p => p.Declaration.Project.Equals(componentProject));

                if (projectNode == null)
                {
                    return;
                }

                SetErrorState(projectNode, e.Component);

                if (_errorStateSet)
                {
                    return;
                }

                // at this point, we know the node is newly added--we have to add a new node, not just change the icon of the old one.
                var projectName = componentProject.Name;
                var folderNode  = projectNode.Items.FirstOrDefault(f => f is CodeExplorerCustomFolderViewModel && f.Name == projectName);

                UiDispatcher.Invoke(() =>
                {
                    if (folderNode == null)
                    {
                        folderNode = new CodeExplorerCustomFolderViewModel(projectNode, projectName, projectName);
                        projectNode.AddChild(folderNode);
                    }

                    var declaration = CreateDeclaration(e.Component);
                    var newNode     = new CodeExplorerComponentViewModel(folderNode, declaration, new List <Declaration>())
                    {
                        IsErrorState = true
                    };

                    folderNode.AddChild(newNode);

                    // Force a refresh. OnPropertyChanged("Projects") didn't work.
                    Projects = Projects;
                });
            }
        }
Esempio n. 2
0
 private void ParserState_ModuleStateChanged(object sender, Parsing.ParseProgressEventArgs e)
 {
     // todo: figure out a way to handle error state.
     // the problem is that the _projects collection might not contain our failing module yet.
 }