diff --git a/CodeCompletion/SymTable.cs b/CodeCompletion/SymTable.cs index 89312466a..757cef027 100644 --- a/CodeCompletion/SymTable.cs +++ b/CodeCompletion/SymTable.cs @@ -2357,7 +2357,41 @@ namespace CodeCompletion exact = false; if (ts.IsDelegate) { - for (int j=0; j static_indexers; public List implemented_interfaces; public List instances; - protected List generic_params; + public List generic_params; public bool is_final; public bool aliased = false; internal bool lazy_instance = false; @@ -5578,6 +5619,18 @@ namespace CodeCompletion if (this.instances[i] is UnknownScope || this.instances[i] is TemplateParameterScope) { List lst = new List(); + TypeScope ts = gen_args[Math.Min(i, gen_args.Count - 1)]; + if (ts.instances != null && ts.instances.Count > 0 && !exact) + { + List template_args = ts.original_type.generic_params; + int ind = template_args.IndexOf(this.instances[i].name); + if (ind != -1) + { + sc.instances.Add(ts.instances[ind]); + sc.generic_params.Add(ts.generic_params[ind]); + continue; + } + } lst.Add(gen_args[Math.Min(i, gen_args.Count - 1)]); if (lst[0].instances != null && lst[0].instances.Count > 0) lst[0] = lst[0].instances[Math.Min(i, lst[0].instances.Count - 1)]; diff --git a/TestSuite/intellisense_tests/generics21.pas b/TestSuite/intellisense_tests/generics21.pas new file mode 100644 index 000000000..a5975c978 --- /dev/null +++ b/TestSuite/intellisense_tests/generics21.pas @@ -0,0 +1,3 @@ +begin + var d{@var d: Dictionary;@} := Dict(KV(1,2)); +end. \ No newline at end of file