public override void InsertCompletionText(CompletionListWindow window, ref KeyActions ka, Gdk.Key closeChar, char keyChar, Gdk.ModifierType modifier)
        {
            var ext       = engine.Ext;
            var editor    = ext.TextEditorData;
            var generator = CodeGenerator.CreateGenerator(ext.Document);

            if (ext.Project != null)
            {
                generator.PolicyParent = ext.Project.Policies;
            }
            var builder = engine.MDRefactoringCtx.CreateTypeSystemAstBuilder();

            string sb = BaseExportCodeGenerator.GenerateMemberCode(engine.MDRefactoringCtx, builder, member);

            sb = sb.TrimEnd();

            string indent = editor.GetIndentationString(editor.Caret.Location);

            sb = sb.Replace(editor.EolMarker, editor.EolMarker + indent);

            int targetCaretPosition  = sb.LastIndexOf("throw", StringComparison.Ordinal);
            int selectionEndPosition = sb.LastIndexOf(";", StringComparison.Ordinal);

            editor.Replace(declarationBegin, editor.Caret.Offset - declarationBegin, sb);
            if (selectionEndPosition > 0)
            {
                targetCaretPosition  += declarationBegin;
                selectionEndPosition += declarationBegin;
                editor.Caret.Offset   = selectionEndPosition;
                editor.SetSelection(targetCaretPosition, selectionEndPosition);
            }
        }
Example #2
0
 protected override void AddVirtuals(List <IMember> alreadyInserted, CompletionDataWrapper col, string modifiers, IType curType, int declarationBegin)
 {
     base.AddVirtuals(alreadyInserted, col, modifiers, curType, declarationBegin);
     foreach (var member in GetProtocolMembers(curType))
     {
         if (alreadyInserted.Contains(member))
         {
             continue;
         }
         if (BaseExportCodeGenerator.IsImplemented(curType, member))
         {
             continue;
         }
         alreadyInserted.Add(member);
         var data = new ProtocolCompletionData(this, declarationBegin, member);
         col.Add(data);
     }
 }
Example #3
0
 IEnumerable <IMember> GetProtocolMembers(IType curType)
 {
     foreach (var t in curType.DirectBaseTypes)
     {
         string name;
         if (!BaseExportCodeGenerator.HasProtocolAttribute(t, out name))
         {
             continue;
         }
         var protocolType = Compilation.FindType(new FullTypeName(new TopLevelTypeName(t.Namespace, name)));
         if (protocolType == null)
         {
             break;
         }
         foreach (var member in protocolType.GetMethods(null, GetMemberOptions.IgnoreInheritedMembers))
         {
             if (member.ImplementedInterfaceMembers.Any() || member.IsAbstract || !member.IsVirtual)
             {
                 continue;
             }
             if (member.Attributes.Any(a => a.AttributeType.Name == "ExportAttribute" && a.AttributeType.Namespace == "MonoTouch.Foundation"))
             {
                 yield return(member);
             }
         }
         foreach (var member in protocolType.GetProperties(null, GetMemberOptions.IgnoreInheritedMembers))
         {
             if (member.ImplementedInterfaceMembers.Any() || member.IsAbstract || !member.IsVirtual)
             {
                 continue;
             }
             if (member.CanGet && member.Getter.Attributes.Any(a => a.AttributeType.Name == "ExportAttribute" && a.AttributeType.Namespace == "MonoTouch.Foundation") ||
                 member.CanSet && member.Setter.Attributes.Any(a => a.AttributeType.Name == "ExportAttribute" && a.AttributeType.Namespace == "MonoTouch.Foundation"))
             {
                 yield return(member);
             }
         }
     }
 }