/** <summary>
  *  Return a list of all template sigs that are present in the group, but
  *  that have wrong formal argument lists.  Return null if all is well.
  *  </summary>
  */
 public virtual IList<string> GetMismatchedTemplates( StringTemplateGroup group )
 {
     List<string> mismatched = new List<string>();
     foreach ( TemplateDefinition d in _templates.Values )
     {
         if ( group.IsDefined( d.name ) )
         {
             StringTemplate defST = group.GetTemplateDefinition( d.name );
             var formalArgs = defST.FormalArguments;
             bool ack = false;
             if ( ( d.formalArgs != null && formalArgs == null ) ||
                 ( d.formalArgs == null && formalArgs != null ) ||
                 d.formalArgs.Count != formalArgs.Count )
             {
                 ack = true;
             }
             if ( !ack )
             {
                 foreach ( var arg in formalArgs )
                 {
                     FormalArgument arg2;
                     if ( !d.formalArgs.TryGetValue( arg.name, out arg2 ) || arg2 == null )
                     {
                         ack = true;
                         break;
                     }
                 }
             }
             if ( ack )
             {
                 //System.out.println(d.formalArgs+"!="+formalArgs);
                 mismatched.Add( GetTemplateSignature( d ) );
             }
         }
     }
     if ( mismatched.Count == 0 )
     {
         mismatched = null;
     }
     return mismatched;
 }