diff --git a/CodeCompletion/ExpressionVisitor.cs b/CodeCompletion/ExpressionVisitor.cs index 36cd6825c..d086b13e5 100644 --- a/CodeCompletion/ExpressionVisitor.cs +++ b/CodeCompletion/ExpressionVisitor.cs @@ -57,6 +57,17 @@ namespace CodeCompletion { returned_scope = null; } + if (returned_scope is ProcScope && (expr is ident || expr is dot_node)) + { + try + { + expr = new method_call(expr as addressed_value, new expression_list()); + expr.visit(this); + } + catch (Exception e) + { + } + } if (returned_scope != null && returned_scope is ElementScope && (returned_scope as ElementScope).sc is ProcScope) { if ((returned_scope as ElementScope).si.kind == SymbolKind.Delegate) diff --git a/CodeCompletion/SymTable.cs b/CodeCompletion/SymTable.cs index 444c64941..8b800cd00 100644 --- a/CodeCompletion/SymTable.cs +++ b/CodeCompletion/SymTable.cs @@ -1436,6 +1436,8 @@ namespace CodeCompletion public override List FindOverloadNames(string name) { + if (string.Compare(si.name, name, true) == 0) + return new List() { this }; List names = sc.FindOverloadNames(name); if (topScope != null) names.AddRange(topScope.FindOverloadNames(name)); @@ -2921,7 +2923,11 @@ namespace CodeCompletion public override List FindOverloadNames(string name) { - return actType.FindOverloadNames(name); + List names = actType.FindOverloadNames(name); + if (names.Count > 0) + return names; + if (topScope != null) return topScope.FindOverloadNames(name); + return names; } public override List FindOverloadNamesOnlyInType(string name) @@ -4221,6 +4227,8 @@ namespace CodeCompletion public override bool IsEqual(SymScope ts) { bool eq = this == ts as TypeScope; + if (ts == null) + return false; if (ts is NullTypeScope && this.kind == SymbolKind.Class) return true; if (eq) diff --git a/TestSuite/intellisense_tests/extensionmethods6.pas b/TestSuite/intellisense_tests/extensionmethods6.pas index f359f84fd..a864e1020 100644 --- a/TestSuite/intellisense_tests/extensionmethods6.pas +++ b/TestSuite/intellisense_tests/extensionmethods6.pas @@ -5,4 +5,5 @@ procedure p1(self:t1); extensionmethod := exit; begin var a := new t1; a.p1{@(расширение) procedure t1.p1();@}; + a.p1{@(расширение) procedure t1.p1();@}(); end. \ No newline at end of file diff --git a/TestSuite/intellisense_tests/extensionmethods9.pas b/TestSuite/intellisense_tests/extensionmethods9.pas index 9bc741edf..238ce467f 100644 --- a/TestSuite/intellisense_tests/extensionmethods9.pas +++ b/TestSuite/intellisense_tests/extensionmethods9.pas @@ -1,4 +1,7 @@ begin var ch: char; ch.IsDigit{@(расширение) function char.IsDigit(): boolean;@}; + char.IsDigit{@static function char.IsDigit(c: char): boolean;@}(ch); + var a: array of byte; + a.Reverse{@(расширение sequence of T) function Reverse(): sequence of byte;@}; end. \ No newline at end of file