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; }