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

            }
        }