public void ClearBuiltInReferences()
 {
     foreach (var item in AllDeclarations.Where(item => item.IsBuiltIn && item.References.Any()))
     {
         item.ClearReferences();
     }
 }
        public Declaration FindSelectedDeclaration(CodePane activeCodePane, bool procedureLevelOnly = false)
        {
            var selection = activeCodePane.GetSelection();

            if (selection.Equals(_lastSelection))
            {
                return(_selectedDeclaration);
            }

            _lastSelection       = selection;
            _selectedDeclaration = null;

            if (!selection.Equals(default(QualifiedSelection)))
            {
                var matches = AllDeclarations
                              .Where(item => item.DeclarationType != DeclarationType.Project &&
                                     item.DeclarationType != DeclarationType.ModuleOption &&
                                     item.DeclarationType != DeclarationType.ClassModule &&
                                     item.DeclarationType != DeclarationType.ProceduralModule &&
                                     (IsSelectedDeclaration(selection, item) ||
                                      item.References.Any(reference => IsSelectedReference(selection, reference))))
                              .ToList();
                try
                {
                    if (matches.Count == 1)
                    {
                        _selectedDeclaration = matches.Single();
                    }
                    else
                    {
                        Declaration match = null;
                        if (procedureLevelOnly)
                        {
                            match = matches.SingleOrDefault(item => item.DeclarationType.HasFlag(DeclarationType.Member));
                        }

                        // ambiguous (?), or no match - make the module be the current selection
                        match = match ?? AllUserDeclarations.SingleOrDefault(item =>
                                                                             (item.DeclarationType == DeclarationType.ClassModule || item.DeclarationType == DeclarationType.ProceduralModule) &&
                                                                             item.QualifiedName.QualifiedModuleName.Equals(selection.QualifiedName));

                        _selectedDeclaration = match;
                    }
                }
                catch (InvalidOperationException exception)
                {
                    Debug.WriteLine(exception);
                }
            }

            if (_selectedDeclaration != null)
            {
                Debug.WriteLine("Current selection ({0}) is '{1}' ({2})", selection, _selectedDeclaration.IdentifierName, _selectedDeclaration.DeclarationType);
            }

            return(_selectedDeclaration);
        }