/// <summary>
        /// Removes violation got from the custom analyzer.
        /// </summary>
        public static void RemoveCustomViolation(ViolationEventArgs e)
        {
            string key = (string)typeof(Violation).InvokeMember(
                "Key",
                BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetProperty,
                null,
                e.Violation,
                null);

            Dictionary<string, Violation> violations = (Dictionary<string, Violation>)typeof(CodeElement).InvokeMember(
                "violations",
                BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField,
                null,
                e.Element,
                null);

            violations.Remove(key);
        }
示例#2
0
 /// <summary>
 /// Handles encountered violations.
 /// </summary>
 private static void OnViolationEncountered(object sender, ViolationEventArgs e)
 {
     Console.WriteLine("{0} ({1}): {2}", e.Violation.Rule.CheckId, e.LineNumber, e.Message);
 }
 /// <summary>
 /// Handles encountered violations.
 /// </summary>
 /// <param name="sender">The sender.</param>
 /// <param name="e">The <see cref="ViolationEventArgs"/> instance containing the event data.</param>
 private static void OnViolationEncountered(
     object sender,
     ViolationEventArgs e)
 {
     string elementName = (null != e.Element) ? e.Element.FullyQualifiedName : string.Empty;
     Console.WriteLine(
         "{0},{1},{2},{3},{4},{5}",
         e.Violation.Rule.CheckId,
         e.Message.Replace(',', ' '),
         e.SourceCode.Path.Replace(',', ' '),
         e.Violation.Rule.Namespace.Replace(',', ' '),
         elementName.Replace(',', ' '),
         e.LineNumber);
 }
        /// <summary>
        /// Reports violations encountered by stylecop to the error pad
        /// </summary>
        /// <param name="sender">
        /// A <see cref="System.Object"/> determining which object sends this violation
        /// </param>
        /// <param name="args">
        /// A <see cref="ViolationEventArgs"/> determining elements composing the violation
        /// </param>
        private void OnViolationEncountered(object sender, ViolationEventArgs args)
        {
            try
            {
            MonoDevelop.Projects.BuildError b = new MonoDevelop.Projects.BuildError(args.Element.Document.SourceCode.Path, args.LineNumber, 0, args.Violation.Rule.CheckId, args.Message);
            b.IsWarning = args.Warning;
            Task errorTask = new Task(b, RunStyleCopHandler.styleCopAddinOwner);

            this.errorPad.AddTask(errorTask);
            }
            catch (Exception e)
            {
                this.logger.WriteLine("Error: {0}\nStackTrace:{1}", e.Message, e.StackTrace);
            }
        }
示例#5
0
        /// <summary>
        /// Called when a violation is encountered during an analysis.
        /// </summary>
        /// <param name="e">The event arguments.</param>
        protected void OnViolationEncountered(ViolationEventArgs e)
        {
            Param.RequireNotNull(e, "e");

            if (this.ViolationEncountered != null)
            {
                this.ViolationEncountered(this, e);
            }
        }
        /// <summary>
        /// Removes violation got from the custom analyzer.
        /// </summary>
        public static void RemoveCustomViolation(ViolationEventArgs e)
        {
            Dictionary<string, Violation> violations = (Dictionary<string, Violation>)typeof(CsElement).InvokeMember(
                "violations",
                BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField,
                null,
                e.Element,
                null);

            violations.Remove(e.Violation.Key);
        }
 /// <summary>
 /// Reads the value of custom setting.
 /// </summary>
 private bool ReadSetting(ViolationEventArgs e, string settingName)
 {
     return SettingsManager.GetValue<bool>(
         m_parent,
         e.Element.Document.Settings,
         settingName);
 }
        /// <summary>
        /// Callback method for when a violation is encountered.
        /// </summary>
        /// <param name="sender">
        /// The object that caused this event.
        /// </param>
        /// <param name="e">
        /// The ViolationEventArgs object that describes this violation.
        /// </param>
        private void ViolationEncountered(
            object sender,
            ViolationEventArgs e)
        {
            // Add the violation.
            var sfiles =
                this.Report.SourceCodeFiles.Where(
                    r => r.Path == e.SourceCode.Path);

            foreach (var sf in sfiles)
            {
                var lines = File.ReadAllLines(sf.Path);

                lock (this.Report)
                {
                    var violation = this.Report.Violations.AddViolationsRow(
                        e.LineNumber,
                        e.Message,
                        sf,
                        lines[e.LineNumber - 1]);

                    // Add the rule.
                    this.Report.Rules.AddRulesRow(
                        e.Violation.Rule.CheckId,
                        e.Violation.Rule.Description,
                        e.Violation.Rule.EnabledByDefault,
                        e.Violation.Rule.Name,
                        e.Violation.Rule.Namespace,
                        e.Violation.Rule.RuleGroup,
                        e.Violation.Rule.Warning,
                        violation);
                }
            }
        }
        /// <summary>
        /// Handles SA1643 violation.
        /// </summary>
        private void Handle1643(ViolationEventArgs e)
        {
            CsElement element = (CsElement)e.Element;

            string text = CodeHelper.GetSummaryText(element);
            if (text == Resources.StandardDestructorSummaryText)
                return;

            m_parent.AddViolation(
                element,
                Rules.DestructorSummaryDocumentationMustBeginWithStandardText,
                new object[] { StyleCop43Compatibility.GetExampleSummaryTextForDestructor(m_customDocumentationAnalyzer) });
        }
        /// <summary>
        /// Handles encountered custom violations.
        /// </summary>
        private void OnCustomViolationEncountered(object sender, ViolationEventArgs e)
        {
            StyleCop43Compatibility.RemoveCustomViolation(e);

            switch (e.Violation.Rule.CheckId)
            {
                case "SA1502":
                    Handle1502(e);
                    break;

                case "SA1509":
                    Handle1509(e);
                    break;

                case "SA1513":
                    Handle1513(e);
                    break;

                case "SA1516":
                    Handle1516(e);
                    break;

                case "SA1642":
                    Handle1642(e);
                    break;

                case "SA1643":
                    Handle1643(e);
                    break;
            }
        }
        /// <summary>
        /// Handles SA1516 violation.
        /// </summary>
        private void Handle1516(ViolationEventArgs e)
        {
            CsElement element = (CsElement)e.Element;

            if (ReadSetting(e, AllowJoinedAccessorsFor1516))
            {
                if (element.ElementType == ElementType.Accessor)
                    return;

                if (StyleCop43Compatibility.IsStyleCop43())
                {
                    Node<CsToken> node = CodeHelper.GetNodeByLine((CsDocument)element.Document, e.LineNumber);
                    if (node != null)
                    {
                        Node<CsToken> next1 = CodeHelper.FindNextValueableNode(node);
                        if (next1.Value.CsTokenType == CsTokenType.CloseCurlyBracket)
                        {
                            Node<CsToken> next2 = CodeHelper.FindNextValueableNode(next1);
                            if (next2.Value.CsTokenType == CsTokenType.Get
                                || next2.Value.CsTokenType == CsTokenType.Set)
                                return;
                        }
                    }
                }
            }

            m_parent.AddViolation(
                element,
                Rules.ElementsMustBeSeparatedByBlankLine);
        }
        /// <summary>
        /// Handles SA1509 violation.
        /// </summary>
        private void Handle1509(ViolationEventArgs e)
        {
            CsElement element = (CsElement)e.Element;

            if (ReadSetting(e, AllowNestedCodeBlocksFor1509))
            {
                Node<CsToken> node = CodeHelper.GetNodeByLine((CsDocument)element.Document, e.LineNumber);
                if (node != null)
                {
                    Node<CsToken> prev = CodeHelper.FindPreviousValueableNode(node);
                    if (prev.Value.CsTokenType == CsTokenType.Semicolon
                        || prev.Value.CsTokenType == CsTokenType.CloseCurlyBracket)
                        return;
                }
            }

            m_parent.AddViolation(
                element,
                e.LineNumber,
                Rules.OpeningCurlyBracketsMustNotBePrecededByBlankLine,
                new object[0]);
        }
        /// <summary>
        /// Handles SA1502 violation.
        /// </summary>
        private void Handle1502(ViolationEventArgs e)
        {
            CsElement element = (CsElement)e.Element;

            if (ReadSetting(e, AllowConstructorsFor1502))
            {
                if (element.ElementType == ElementType.Constructor)
                    return;
            }

            m_parent.AddViolation(
                element,
                e.LineNumber,
                Rules.OpeningCurlyBracketsMustNotBePrecededByBlankLine,
                element.FriendlyTypeText);
        }
示例#14
0
        /// <summary>
        /// Called when a violation is found.
        /// </summary> 
        /// <param name="sender">The event sender.</param>
        /// <param name="e">The event arguments.</param>
        private void CoreViolationEncountered(object sender, ViolationEventArgs e)
        {
            Param.Ignore(sender, e);

            lock (this)
            {
                // Create the violation element.
                XmlElement violation = this.violations.CreateElement("Violation");
                XmlAttribute attrib = null;

                // Add the element section if it's not empty.
                if (e.Element != null)
                {
                    attrib = this.violations.CreateAttribute("Section");
                    attrib.Value = CreateSafeSectionName(e.Element.FullyQualifiedName);
                    violation.Attributes.Append(attrib);
                }

                // Add the line number.
                attrib = this.violations.CreateAttribute("LineNumber");
                attrib.Value = e.LineNumber.ToString(CultureInfo.InvariantCulture);
                violation.Attributes.Append(attrib);

                // Get the source code that this element is in.
                SourceCode sourceCode = e.SourceCode;
                if (sourceCode == null && e.Element != null && e.Element.Document != null)
                {
                    sourceCode = e.Element.Document.SourceCode;
                }

                // Add the source code path.
                if (sourceCode != null)
                {
                    attrib = this.violations.CreateAttribute("Source");
                    attrib.Value = sourceCode.Path;
                    violation.Attributes.Append(attrib);
                }

                // Add the rule namespace.
                attrib = this.violations.CreateAttribute("RuleNamespace");
                attrib.Value = e.Violation.Rule.Namespace;
                violation.Attributes.Append(attrib);

                // Add the rule name.
                attrib = this.violations.CreateAttribute("Rule");
                attrib.Value = e.Violation.Rule.Name;
                violation.Attributes.Append(attrib);

                // Add the rule ID.
                attrib = this.violations.CreateAttribute("RuleId");
                attrib.Value = e.Violation.Rule.CheckId;
                violation.Attributes.Append(attrib);

                violation.InnerText = e.Message;

                this.violations.DocumentElement.AppendChild(violation);
                this.violationCount++;
            }

            // Forward event
            this.OnViolationEncountered(new ViolationEventArgs(e.Violation));
        }
示例#15
0
 private void CoreViolationEncountered(object sender, ViolationEventArgs e)
 {
     lock (this)
     {
         XmlElement newChild = this.violations.CreateElement("Violation");
         XmlAttribute node = null;
         if (e.Element != null)
         {
             node = this.violations.CreateAttribute("Section");
             node.Value = CreateSafeSectionName(e.Element.FullyQualifiedName);
             newChild.Attributes.Append(node);
         }
         node = this.violations.CreateAttribute("LineNumber");
         node.Value = e.LineNumber.ToString(CultureInfo.InvariantCulture);
         newChild.Attributes.Append(node);
         SourceCode sourceCode = e.SourceCode;
         if (((sourceCode == null) && (e.Element != null)) && (e.Element.Document != null))
         {
             sourceCode = e.Element.Document.SourceCode;
         }
         if (sourceCode != null)
         {
             node = this.violations.CreateAttribute("Source");
             node.Value = sourceCode.Path;
             newChild.Attributes.Append(node);
         }
         node = this.violations.CreateAttribute("RuleNamespace");
         node.Value = e.Violation.Rule.Namespace;
         newChild.Attributes.Append(node);
         node = this.violations.CreateAttribute("Rule");
         node.Value = e.Violation.Rule.Name;
         newChild.Attributes.Append(node);
         node = this.violations.CreateAttribute("RuleId");
         node.Value = e.Violation.Rule.CheckId;
         newChild.Attributes.Append(node);
         newChild.InnerText = e.Message;
         this.violations.DocumentElement.AppendChild(newChild);
         this.violationCount++;
     }
     this.OnViolationEncountered(new ViolationEventArgs(e.Violation));
 }
示例#16
0
        /// <summary>
        /// Called when a violation is encountered during an analysis.
        /// </summary>
        /// <param name="e">The event arguments.</param>
        private void OnViolationEncountered(ViolationEventArgs e)
        {
            Param.AssertNotNull(e, "e");

            if (this.ViolationEncountered != null)
            {
                this.ViolationEncountered(this, e);
            }
        }
示例#17
0
 private void OnViolationEncountered(ViolationEventArgs e)
 {
     if (this.ViolationEncountered != null)
     {
         this.ViolationEncountered(this, e);
     }
 }
示例#18
0
        /// <summary>
        /// Called when StyleCop encounters a violation.
        /// </summary>
        /// <param name="sender">The eventt sender.</param>
        /// <param name="e">The event arguments.</param>
        private void OnViolationEncountered(object sender, ViolationEventArgs e)
        {
            Param.Ignore(sender);
            Param.AssertNotNull(e, "e");

            if (this.violationLimit < 0 || this.violationCount < this.violationLimit)
            {
                this.violationCount++;

                // Does the violation qualify for breaking the build?
                if (!(e.Warning || this.inputTreatErrorsAsWarnings))
                {
                    this.succeeded = false;
                }

                string path = string.Empty;
                if (e.SourceCode != null && e.SourceCode.Path != null && e.SourceCode.Path.Length > 0)
                {
                    path = e.SourceCode.Path;
                }
                else if (e.Element != null &&
                    e.Element.Document != null &&
                    e.Element.Document.SourceCode != null &&
                    e.Element.Document.SourceCode.Path != null)
                {
                    path = e.Element.Document.SourceCode.Path;
                }

                // Prepend the rule check-id to the message.
                string message = string.Format(CultureInfo.CurrentCulture, Strings.ViolationFormatter, e.Violation.Rule.CheckId, e.Message);

                lock (this)
                {
                    if (e.Warning || this.inputTreatErrorsAsWarnings)
                    {
                        Log.LogWarning(MSBuildSubCategory, MSBuildErrorCode, null, path, e.LineNumber, 1, 0, 0, message);
                    }
                    else
                    {
                        Log.LogError(MSBuildSubCategory, MSBuildErrorCode, null, path, e.LineNumber, 1, 0, 0, message);
                    }
                }
            }
        }
 /// <summary>
 /// Handles encountered violations.
 /// </summary>
 private void OnViolationEncountered(object sender, ViolationEventArgs e)
 {
     Violations.Add(e.Violation.Rule.Name);
 }