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