Example #1
0
        private void CompressEvent_CheckAvailability(Object sender, CheckContentAvailabilityEventArgs ea)
        {
            CodeRush.Documents.ActiveTextDocument.ParseIfNeeded();
            _EventToCompress = GetEvent(ea.Caret);
            // Exit if no Event found under caret
            if (_EventToCompress == null)
                return;
            // Exit if _Event has no Add or Remove
            if (_EventToCompress.Nodes.Count == 0)
                return;

            var EventAdd = (EventAdd)_EventToCompress.Nodes[0];
            var EventRemove = (EventRemove)_EventToCompress.Nodes[1];

            // Add and Remove must contain exactly one assignment statement
            if (EventAdd.Nodes.Count != 1)
                return;
            if (EventRemove.Nodes.Count != 1)
                return;

            var EventAddAssign = (Assignment)EventAdd.Nodes[0];
            var EventRemoveAssign = (Assignment)EventRemove.Nodes[0];

            // Assignment Statements must assign to same variable
            if (EventAddAssign.LeftSide.Name != EventRemoveAssign.LeftSide.Name)
                return;

            var EventField = EventAddAssign.LeftSide;
            _EventToCompressFieldDeclaration = (Variable)EventField.GetDeclaration().ToLanguageElement();
            // Variable must be of type EventHandler
            if (_EventToCompressFieldDeclaration.MemberType != "EventHandler")
                return;

            // Variable must have 2 and only 2 references.
            if (_EventToCompressFieldDeclaration.FindAllReferences().Count != 2)
                return;

            ea.Available = true;
        }