//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); } } }
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 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); } }
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); } }
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"); } }
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" ); } } }
//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); }
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); } }
private void ipFormatItemIndexTooLarge_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea) { FormatItemTooLargeSearcher searcher = new FormatItemTooLargeSearcher(ipFormatItemIndexTooLarge.DisplayName); searcher.CheckCodeIssues(ea); }
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); } } } } }
private void ipFieldsShouldBeDisposed_CheckCodeIssues(object sender, CheckCodeIssuesEventArgs ea) { FieldShouldBeDisposedSearcher searcher = new FieldShouldBeDisposedSearcher(); searcher.CheckCodeIssues(ea); }
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); } } } }