Пример #1
0
        //public bool AreEqual(bool p1, bool p2)
        //{
        //	if (p1 = p2)
        //		return true;
        //	p1 = p2;
        //	return p2 = p1;
        //}

        private void ipAssignmentIntended_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea)
        {
            // Not inside the UI thread anymore.
            // Don't use CodeRush.Source.Xxxxx, in fact, don't use any CodeRush.Xxxxxx is my recommendation.
            ElementTypeFilter      assignmentExpressionFilter = new ElementTypeFilter(LanguageElementType.AssignmentExpression);
            IEnumerable <IElement> enumerable = ea.GetEnumerable(ea.Scope, assignmentExpressionFilter);

            foreach (IElement element in enumerable)
            {
                // For every LanguageElement type, there is a corresponding interface, that starts with an I.
                IAssignmentExpression assignmentExpression = element as IAssignmentExpression;
                if (assignmentExpression == null)
                {
                    continue;
                }
                TextPoint   start = assignmentExpression.LeftSide.FirstNameRange.Start;
                TextPoint   end   = assignmentExpression.RightSide.FirstNameRange.End;
                SourceRange range = new SourceRange(start, end);
                ea.AddIssue(CodeIssueType.Warning, range, cpAssignmentExpressionToEqualityCheck.CodeIssueMessage);

                // Other code we were playing with...
                //AssignmentExpression assignmentExpressionReal = LanguageElementRestorer.ConvertToLanguageElement(element) as AssignmentExpression;
                //assignmentExpressionReal.OperatorRange
                //ea.AddIssue(CodeIssueType.Warning, assignmentExpression.Range, cpAssignmentExpressionToEqualityCheck.CodeIssueMessage);
            }
        }
        private void StyleCopIssueProvider_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea)
        {
            if (this.checkForSuppressions && ea.IsSuppressed(ea.Scope))
            {
                return;
            }

            var scope = ea.Scope as SourceFile;
            if (scope == null)
            {
                return;
            }

            var project = scope.Project as ProjectElement;
            if (project == null)
            {
                return;
            }

            ISourceCode sourceCode = this.SetupSourceCode(scope);
            foreach (var violationList in this.styleCopRunner.GetViolations(project, sourceCode).Values)
            {
                foreach (var violation in violationList)
                {
                    IStyleCopRule rule = this.issuesFactory.GetRuleFor(violation);
                    rule.AddViolationIssue(ea, sourceCode, violation);
                }
            }
        }
Пример #3
0
 public override void CheckCodeIssues(CheckCodeIssuesEventArgs ea)
 {
     IEnumerable<IElement> enumerable = ea.GetEnumerable(ea.Scope, new ElementTypeFilter(LanguageElementType.PrimitiveExpression));
       foreach (IElement element in enumerable)
       {
     IPrimitiveExpression iPrimitiveExpression = element as IPrimitiveExpression;
     if (iPrimitiveExpression != null)
     {
       if (iPrimitiveExpression.PrimitiveType == PrimitiveType.String)
       {
     IElement methodCallExpression = iPrimitiveExpression.Parent;
     if (PlugIn1.IsStringFormatCall(methodCallExpression))
     {
       FormatItems formatItems = PlugIn1.GetFormatItems(iPrimitiveExpression);
       if (formatItems.ParentMethodCall != null)
       {
         int argumentCount = GetValidArgumentsCount(formatItems);
         foreach (FormatItem formatItem in formatItems.Values)
         {
           int argumentIndex = formatItem.Id + 1;
           if (argumentIndex >= argumentCount)
           {
             int line = formatItems.PrimitiveExpression.FirstNameRange.Start.Line;
             foreach (FormatItemPos position in formatItem.Positions)
               ea.AddError(position.GetSourceRange(line), _Message);
           }
         }
       }
     }
       }
     }
       }
 }
        private void StyleCopIssueProvider_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea)
        {
            if (this.checkForSuppressions && ea.IsSuppressed(ea.Scope))
            {
                return;
            }

            var scope = ea.Scope as SourceFile;

            if (scope == null)
            {
                return;
            }

            var project = scope.Project as ProjectElement;

            if (project == null)
            {
                return;
            }

            ISourceCode sourceCode = this.SetupSourceCode(scope);

            foreach (var violationList in this.styleCopRunner.GetViolations(project, sourceCode).Values)
            {
                foreach (var violation in violationList)
                {
                    IStyleCopRule rule = this.issuesFactory.GetRuleFor(violation);
                    rule.AddViolationIssue(ea, sourceCode, violation);
                }
            }
        }
        private void my_issue_provider_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea)
        {
            try
            {
                PropertyFilter filter = ElementFilters.Property;
                IEnumerable<IElement> enumerable = ea.GetEnumerable(ea.Scope, filter);

                foreach (IElement element in enumerable)
                {
                    IPropertyElement propertyElement = element as IPropertyElement;
                    if (propertyElement == null)
                        continue;

                    bool set_prop_found = false;

                    if (propertyElement.SetMethod != null)
                    {
                        set_prop_found = ContainsSetProperty(element.Name, propertyElement.SetMethod.AllChildren, ea);
                    }

                    bool persistent_found = false;
                    bool delayed_found = false;
                    if (!set_prop_found)
                    {
                        foreach (object atr in propertyElement.Attributes)
                        {
                            IAttributeElement attr = atr as IAttributeElement;
                            if (attr != null && attr.Name == "Persistent")
                                persistent_found = true;

                            if (attr != null && attr.Name == "NonPersistent")
                                persistent_found = false;

                            if (attr != null && attr.Name == "Delayed")
                                delayed_found = true;

                        }

                        if (!persistent_found)
                            continue;

                        ea.AddError(propertyElement.FirstNameRange,
                            "Die persistente Property braucht " +
                            (delayed_found ? "SetDelayedPropertyValue" : "SetPropertyValue"));
                    }
                }
            }
            catch //(Exception ex)
            {

            }
        }
        private static void CheckIssuesForPropertyAssignment(CheckCodeIssuesEventArgs ea, Property property, LanguageElement languageElement)
        {
            var assignment = languageElement as Assignment;

            if (assignment != null && ExpressionReferencesPropertyInInstanceOrStaticContext(assignment.LeftSide as ElementReferenceExpression, property))
            {
                ea.AddError(assignment.Range, StackOverflowExceptionInRuntimeIssueText);
            }
            foreach (LanguageElement child in languageElement.Nodes)
            {
                CheckIssuesForPropertyAssignment(ea, property, child);
            }
        }
        private static void CheckIssuesForPropertyReturn(CheckCodeIssuesEventArgs ea, Property property, LanguageElement languageElement)
        {
            var ret = languageElement as Return;

            if (ret != null && ExpressionReferencesPropertyInInstanceOrStaticContext(ret.Expression as ElementReferenceExpression, property))
            {
                ea.AddError(ret.Range, StackOverflowExceptionInRuntimeIssueText);
            }
            foreach (LanguageElement child in languageElement.Nodes)
            {
                CheckIssuesForPropertyReturn(ea, property, child);
            }
        }
 public void FindCodeIssues(CheckCodeIssuesEventArgs ea)
 {
     var resolveScope = ea.ResolveScope();
     foreach (IMethodElement element in resolveScope.GetElementEnumerator(ea.Scope,new ElementTypeFilter(LanguageElementType.Method)))
     {
         if (MethodHasIssue(element))
         {
             foreach (TextRange range in element.Ranges)
             {
                 ea.AddIssue(IssueType, (SourceRange)range, IssueMessage);
             }
         }
     }
 }
        public void AddViolationIssue(CheckCodeIssuesEventArgs ea, ISourceCode sourceCode, Violation violation)
        {
            var message = string.Format("{0}: {1}", violation.Rule.CheckId, violation.Message);
            var csElement = violation.Element as CsElement;
            if (csElement == null)
            {
                ea.AddSmell(new SourceRange(violation.Line, 1, violation.Line, sourceCode.LengthOfLine(violation.Line) + 1), message, violation, 10);
                return;
            }

            foreach (var styleCopCodeIssue in this.issueLocator.GetCodeIssues(sourceCode, filter => ea.GetEnumerable(ea.Scope, filter), violation, csElement))
            {
                ea.AddIssue(styleCopCodeIssue.IssueType, styleCopCodeIssue.Range, message, violation);
            }
        }
Пример #10
0
        public void AddViolationIssue(CheckCodeIssuesEventArgs ea, ISourceCode sourceCode, Violation violation)
        {
            var message   = string.Format("{0}: {1}", violation.Rule.CheckId, violation.Message);
            var csElement = violation.Element as CsElement;

            if (csElement == null)
            {
                ea.AddSmell(new SourceRange(violation.Line, 1, violation.Line, sourceCode.LengthOfLine(violation.Line) + 1), message, violation, 10);
                return;
            }

            foreach (var styleCopCodeIssue in this.issueLocator.GetCodeIssues(sourceCode, filter => ea.GetEnumerable(ea.Scope, filter), violation, csElement))
            {
                ea.AddIssue(styleCopCodeIssue.IssueType, styleCopCodeIssue.Range, message, violation);
            }
        }
        private void wrongNamespaceIssueProvider_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea)
        {
            if (ea.IsSuppressed(ea.Scope))
            {
                return;
            }

            var scope = ea.Scope as SourceFile;

            if (scope == null)
            {
                return;
            }

            var project = scope.Project as ProjectElement;

            if (project == null)
            {
                return;
            }

            string path = scope.FilePath;
            string expectedNamespace = ExpectedNamespace(project, path);
            var    issueRanges       = new HashSet <TextRange>();

            foreach (IElement element in ea.GetEnumerable(ea.Scope, ElementFilters.Namespace))
            {
                var namespaceElement = element as INamespaceElement;
                if (namespaceElement == null)
                {
                    continue;
                }

                if (NamespaceShouldBeUpdated(scope, namespaceElement, expectedNamespace))
                {
                    foreach (var fullNameRange in GetWrongNamespaceNameRanges(scope, namespaceElement))
                    {
                        issueRanges.Add(fullNameRange);
                    }
                }
            }
            foreach (TextRange range in issueRanges)
            {
                ea.AddHint(range, "Namespace is not default", 10);
            }
        }
Пример #12
0
        private void closureScopeIssueProvider_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea)
        {
            if (ea.IsSuppressed(ea.Scope))
            {
                return;
            }

            foreach (IElement loop in ea.GetEnumerable(ea.Scope, new LoopFilter()))
            {
                var forEachLoop = loop as IForEachStatement;
                if (forEachLoop != null)
                {
                    foreach (IElement lambda in ea.GetEnumerable(forEachLoop, new LambdaFilter()))
                    {
                        var lambdaElement = lambda as IAnonymousMethodExpression;
                        if (lambdaElement == null)
                        {
                            continue;
                        }

                        foreach (IElement element in lambdaElement.Children)
                        {
                            CheckIssuesForReferencedLocalOrField(ea, forEachLoop, lambdaElement, element);
                        }
                    }
                }

                var forLoop = loop as IForStatement;
                if (forLoop != null)
                {
                    foreach (IElement lambda in ea.GetEnumerable(forLoop, new LambdaFilter()))
                    {
                        var lambdaElement = lambda as IAnonymousMethodExpression;
                        if (lambdaElement == null)
                        {
                            continue;
                        }

                        foreach (IElement element in lambdaElement.Children)
                        {
                            CheckIssuesForReferencedLocalOrField(ea, forLoop, lambdaElement, element);
                        }
                    }
                }
            }
        }
 public override void CheckCodeIssues(CheckCodeIssuesEventArgs ea)
 {
     IEnumerable<IElement> enumerable = ea.GetEnumerable(ea.Scope, new ElementTypeFilter(LanguageElementType.Class));
       foreach (IElement element in enumerable)
       {
     IClassElement iClassElement = element as IClassElement;
     if (iClassElement == null)
       continue;
     if (!PlugIn1.AlreadyImplementsIDisposable(iClassElement))
       continue;
     // We DO implement IDisposable! Let's make sure all the fields are disposed....
     IIfStatement parentIfDisposing;
     IList<IFieldElement> disposableFields = PlugIn1.GetDisposableFieldsThatHaveNotBeenDisposed(ea.ResolveScope(), ea.Scope as ISourceFile, iClassElement, out parentIfDisposing);
     if (disposableFields.Count > 0)
       foreach (IFieldElement disposableField in disposableFields)
     ea.AddWarning(disposableField.FirstNameRange, "Fields should be disposed");
       }
 }
Пример #14
0
        private void CheckIssuesForReferencedLocalOrField(CheckCodeIssuesEventArgs ea, IForStatement loop, IElement lambda, IElement element)
        {
            if (element.ElementType == LanguageElementType.ElementReferenceExpression)
            {
                IElement declaration = element.GetDeclaration();
                if (declaration.ElementType == LanguageElementType.Variable || declaration.ElementType == LanguageElementType.InitializedVariable)
                {
                    if (loop.Initializers.Contains(declaration) || !declaration.IsParentedBy(loop))
                    {
                        ea.AddWarning(element.ToLanguageElement().Range, "Possible unintended closure scope misuse");
                    }
                }
                return;
            }

            foreach (IElement child in element.Children)
            {
                CheckIssuesForReferencedLocalOrField(ea, loop, lambda, child);
            }
        }
Пример #15
0
        private void CheckIssuesForReferencedLocalOrField(CheckCodeIssuesEventArgs ea, IForStatement loop, IElement lambda, IElement element)
        {
            if (element.ElementType == LanguageElementType.ElementReferenceExpression)
            {
                IElement declaration = element.GetDeclaration();
                if (declaration.ElementType == LanguageElementType.Variable || declaration.ElementType == LanguageElementType.InitializedVariable)
                {
                    if (loop.Initializers.Contains(declaration) || !declaration.IsParentedBy(loop))
                    {
                        ea.AddWarning(element.ToLanguageElement().Range, "Possible unintended closure scope misuse");
                    }
                }
                return;
            }

            foreach (IElement child in element.Children)
            {
                CheckIssuesForReferencedLocalOrField(ea, loop, lambda, child);
            }
        }
        public void CheckCodeIssue( CheckCodeIssuesEventArgs eventArg )
        {
            var types = new LanguageElementType[] { LanguageElementType.MethodCall };
            var elementFilter = new ElementTypeFilter( types );
            var enumerable = eventArg.GetEnumerable( eventArg.Scope, elementFilter );
            foreach ( var element in enumerable )
            {
                IMethodCallStatement methodCall = element as IMethodCallStatement;
                if ( methodCall == null )
                    continue;

                IMethodElement methodDeclaration = methodCall.GetDeclaration() as IMethodElement;
                if ( methodDeclaration == null )
                    continue;

                if ( methodDeclaration.MethodType == MethodTypeEnum.Function )
                {
                    eventArg.AddHint( methodCall.FirstNameRange, "Return value is not used" );
                }
            }
        }
Пример #17
0
		//public bool AreEqual(bool p1, bool p2)
		//{
		//	if (p1 = p2)
		//		return true;
		//	p1 = p2;
		//	return p2 = p1;
		//}

		private void ipAssignmentIntended_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea)
		{
			// Not inside the UI thread anymore.
			// Don't use CodeRush.Source.Xxxxx, in fact, don't use any CodeRush.Xxxxxx is my recommendation.
			ElementTypeFilter assignmentExpressionFilter = new ElementTypeFilter(LanguageElementType.AssignmentExpression);
			IEnumerable<IElement> enumerable = ea.GetEnumerable(ea.Scope, assignmentExpressionFilter);
			foreach (IElement element in enumerable)
			{
				// For every LanguageElement type, there is a corresponding interface, that starts with an I.
				IAssignmentExpression assignmentExpression = element as IAssignmentExpression;
				if (assignmentExpression == null)
					continue;
				TextPoint start = assignmentExpression.LeftSide.FirstNameRange.Start;
				TextPoint end = assignmentExpression.RightSide.FirstNameRange.End;
				SourceRange range = new SourceRange(start, end);
				ea.AddIssue(CodeIssueType.Warning, range, cpAssignmentExpressionToEqualityCheck.CodeIssueMessage);

				// Other code we were playing with...
				//AssignmentExpression assignmentExpressionReal = LanguageElementRestorer.ConvertToLanguageElement(element) as AssignmentExpression;
				//assignmentExpressionReal.OperatorRange
				//ea.AddIssue(CodeIssueType.Warning, assignmentExpression.Range, cpAssignmentExpressionToEqualityCheck.CodeIssueMessage);
			}
		}
 private static bool ContainsSetProperty(string elementName, IEnumerable<IElement> elements, CheckCodeIssuesEventArgs ea)
 {
     if (elements == null) return false;
     try
     {
         foreach(IElement setterElement in elements)
         {
             if (setterElement.ElementType == LanguageElementType.MethodCall
                          && (
                                  setterElement.FullName.Contains("SetPropertyValue")
                               || setterElement.FullName.Contains("SetDelayedPropertyValue")
                               || setterElement.FullName.Contains("SetPropertyStringWithMaxSize"))
                          )
             {
                 IMethodCallStatement call = setterElement as IMethodCallStatement;
                 if (call != null)
                 {
                     foreach (var item in call.Arguments)
                     {
                         var i = item as IPrimitiveExpression;
                         if (i != null && i.Value.ToString() != elementName)
                             ea.AddError(call.FirstNameRange,
                                 string.Format("Der Aufruf von SetPropertyValue benutzt nicht den Property-Namen !\r\nBitte \"{0}\" in \"{1}\" ändern !!!",
                                 i.Value, elementName));
                     }
                 }
                 return true;
             }
             if (ContainsSetProperty(elementName, setterElement.AllChildren, ea))
                 return true;
         }
     }
     catch
     {
     }
     return false;
 }
 private void cipNoAssertsInTest_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea)
 {
     new UnitTestShouldAssertCodeIssueFinder().FindCodeIssues(ea);
 }
Пример #20
0
 private void ipReturnValueNotUsed_CheckCodeIssues( object sender, CheckCodeIssuesEventArgs ea )
 {
     var issue = new ReturnValueNotUsedIssue();
     issue.CheckCodeIssue( ea );
 }
        private void wrongNamespaceIssueProvider_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea)
        {
            if (ea.IsSuppressed(ea.Scope))
                return;

            var scope = ea.Scope as SourceFile;
            if (scope == null)
                return;

            var project = scope.Project as ProjectElement;
            if (project == null)
                return;

            string path = scope.FilePath;
            string expectedNamespace = ExpectedNamespace(project, path);
            var issueRanges = new HashSet<TextRange>();

            foreach (IElement element in ea.GetEnumerable(ea.Scope, ElementFilters.Namespace))
            {
                var namespaceElement = element as INamespaceElement;
                if (namespaceElement == null)
                    continue;

                if (NamespaceShouldBeUpdated(scope, namespaceElement, expectedNamespace))
                {
                    foreach (var fullNameRange in GetWrongNamespaceNameRanges(scope, namespaceElement))
                    {
                        issueRanges.Add(fullNameRange);
                    }
                }
            }
            foreach (TextRange range in issueRanges)
            {
                ea.AddHint(range, "Namespace is not default", 10);
            }
        }
Пример #22
0
 private void ipFormatItemIndexTooLarge_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea)
 {
     FormatItemTooLargeSearcher searcher = new FormatItemTooLargeSearcher(ipFormatItemIndexTooLarge.DisplayName);
       searcher.CheckCodeIssues(ea);
 }
Пример #23
0
        private void closureScopeIssueProvider_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea)
        {
            if (ea.IsSuppressed(ea.Scope))
                return;

            foreach (IElement loop in ea.GetEnumerable(ea.Scope, new LoopFilter()))
            {
                var forEachLoop = loop as IForEachStatement;
                if (forEachLoop != null)
                {
                    foreach (IElement lambda in ea.GetEnumerable(forEachLoop, new LambdaFilter()))
                    {
                        var lambdaElement = lambda as IAnonymousMethodExpression;
                        if (lambdaElement == null)
                            continue;

                        foreach (IElement element in lambdaElement.Children)
                        {
                            CheckIssuesForReferencedLocalOrField(ea, forEachLoop, lambdaElement, element);
                        }
                    }
                }

                var forLoop = loop as IForStatement;
                if (forLoop != null)
                {
                    foreach (IElement lambda in ea.GetEnumerable(forLoop, new LambdaFilter()))
                    {
                        var lambdaElement = lambda as IAnonymousMethodExpression;
                        if (lambdaElement == null)
                            continue;

                        foreach (IElement element in lambdaElement.Children)
                        {
                            CheckIssuesForReferencedLocalOrField(ea, forLoop, lambdaElement, element);
                        }
                    }
                }
            }
        }
Пример #24
0
 private void ipFieldsShouldBeDisposed_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea)
 {
     FieldShouldBeDisposedSearcher searcher = new FieldShouldBeDisposedSearcher();
       searcher.CheckCodeIssues(ea);
 }
Пример #25
0
 private void ipClassShouldImplementIDisposable_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea)
 {
     IEnumerable<IElement> enumerable = ea.GetEnumerable(ea.Scope, new ElementTypeFilter(LanguageElementType.Class));
       foreach (IElement element in enumerable)
       {
     IClassElement iClassElement = element as IClassElement;
     if (iClassElement == null)
       continue;
     if (iClassElement.IsStatic)
       continue;
     if (AlreadyImplementsIDisposable(iClassElement))
       continue;
     // We do NOT implement IDisposable! Let's see if any of the fields implement IDisposable....
     foreach (IElement child in iClassElement.AllChildren)
     {
       IFieldElement iBaseVariable = child as IFieldElement;
       if (iBaseVariable == null)
     continue;
       if (iBaseVariable.IsStatic)
     continue;
       if (iBaseVariable.Is("System.IDisposable"))
       {
     TextRange issueRange = GetIssueRange(ea.Scope, iClassElement);
     ea.AddWarning(issueRange, ipClassShouldImplementIDisposable.DisplayName);
     break;
       }
     }
       }
 }
        private void StackOverflowInGetterIssueProvider_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea)
        {
            if (ea.IsSuppressed(ea.Scope))
            {
                return;
            }

            foreach (IElement element in ea.GetEnumerable(ea.Scope, ElementFilters.Property))
            {
                var propertyElement = element as IPropertyElement;
                if (propertyElement == null)
                {
                    continue;
                }

                Property property = (Property)propertyElement.ToLanguageElement();
                if (property == null)
                {
                    continue;
                }

                if (property.Getter != null)
                {
                    foreach (LanguageElement getterElement in property.Getter.Nodes)
                    {
                        CheckIssuesForPropertyReturn(ea, property, getterElement);
                    }
                }
                if (property.Setter != null)
                {
                    foreach (LanguageElement setterElement in property.Setter.Nodes)
                    {
                        CheckIssuesForPropertyAssignment(ea, property, setterElement);
                    }
                }
            }
        }