示例#1
0
 public virtual void CodeCompletion(string Text, Point Position, CodeCompletionArgs e)
 {
 }
示例#2
0
        public override void CodeCompletion(string Text, Point Position, CodeCompletionArgs e)
        {
            string text2;

            if (((e.CompletionType == CodeCompletionType.ListMembers) || (e.CompletionType == CodeCompletionType.CompleteWord)) || ((e.CompletionType == CodeCompletionType.None) && (e.KeyChar == '.')))
            {
                string text1;
                int    num1;
                if (this.GetNameAndTypeFromCode(Text, Position.X, out text1, out text2, out num1))
                {
                    object obj1  = base.UnitInfo.GetObjectClass((text1 == string.Empty) ? base.UnitInfo.SelfName : text1, Position);
                    bool   flag1 = false;
                    if ((obj1 == null) && (text1 != string.Empty))
                    {
                        obj1  = base.UnitInfo.GetClassByName(text1);
                        flag1 = true;
                    }
                    IListMembers members1 = null;
                    if (obj1 != null)
                    {
                        members1 = new ListMembers();
                        if (obj1 is IInterfaceInfo)
                        {
                            this.AddCodeMembers(members1, (IInterfaceInfo)obj1, flag1);
                        }
                        else if (obj1 is Type)
                        {
                            this.AddCodeMembers(members1, (Type)obj1, flag1);
                        }
                    }
                    if (text1 == string.Empty)
                    {
                        ArrayList list1 = new ArrayList();
                        base.UnitInfo.Sections.GetRanges(list1, Position);
                        for (int num2 = list1.Count - 1; num2 >= 0; num2--)
                        {
                            if (list1[num2] is IHasParams)
                            {
                                if (members1 == null)
                                {
                                    members1 = new ListMembers();
                                }
                                this.AddCodeMembers(((IHasParams)list1[num2]).Params, members1);
                            }
                            if (list1[num2] is IHasLocalVars)
                            {
                                if (members1 == null)
                                {
                                    members1 = new ListMembers();
                                }
                                this.AddCodeMembers(((IHasLocalVars)list1[num2]).LocalVars, members1);
                            }
                        }
                    }
                    e.Provider = members1;
                }
                if (e.Provider != null)
                {
                    e.Provider.ShowDescriptions = true;
                    e.StartPosition             = new Point(num1, Position.Y);
                    int num3 = 0;
                    if (this.FindCodeText(text2, e.Provider, out num3) && (e.CompletionType == CodeCompletionType.CompleteWord))
                    {
                        e.SelIndex = num3;
                    }
                    e.Provider.SelIndex = Math.Max(num3, 0);
                    e.Provider.Images   = base.UnitInfo.Images;
                }
            }
            else
            {
                int num4;
                int num5;
                if (((e.CompletionType == CodeCompletionType.ParameterInfo) || ((e.CompletionType == CodeCompletionType.None) && (e.KeyChar == '('))) && this.GetMethodNameFromCode(Text, Position.X, out text2, out num5, out num4))
                {
                    ArrayList list2 = new ArrayList();
                    base.UnitInfo.GetMethods(text2, Position, list2);
                    if (list2.Count > 0)
                    {
                        IParameterInfo info1 = new River.Orqa.Editor.Syntax.ParameterInfo();
                        info1.ShowParams     = true;
                        info1.ShowQualifiers = false;
                        foreach (object obj2 in list2)
                        {
                            IListMember member1 = info1.AddMember();
                            if (obj2 is IMethodInfo)
                            {
                                IMethodInfo info2 = (IMethodInfo)obj2;
                                member1.Qualifier = base.UnitInfo.GetMethodQualifier(info2);
                                member1.Name      = info2.Name;
                                member1.DataType  = info2.DataType;
                                member1.ParamText = base.UnitInfo.GetParamText(info2.Params);
                                continue;
                            }
                            if (obj2 is System.Reflection.MethodInfo)
                            {
                                System.Reflection.MethodInfo info3 = (System.Reflection.MethodInfo)obj2;
                                member1.Qualifier = base.UnitInfo.GetMethodQualifier(info3);
                                member1.DataType  = (info3.ReturnType != null) ? info3.ReturnType.Name : string.Empty;
                                member1.Name      = info3.Name;
                                member1.ParamText = base.UnitInfo.GetParamText(info3.GetParameters());
                            }
                        }
                        e.Provider = info1;
                    }
                    e.StartPosition = new Point(num5, Position.Y);
                    e.EndPosition   = new Point(num4, Position.Y);
                    e.ToolTip       = true;
                }
            }
            e.NeedShow = (e.Provider != null) && (e.Provider.Count > 0);
            if (e.CompletionType == CodeCompletionType.None)
            {
                e.Interval = Consts.DefaultHintDelay;
            }
        }