diff --git a/CodeCompletion/SymTable.cs b/CodeCompletion/SymTable.cs index 93cddd4eb..7220c9af9 100644 --- a/CodeCompletion/SymTable.cs +++ b/CodeCompletion/SymTable.cs @@ -4358,8 +4358,25 @@ namespace CodeCompletion ts.loc = this.loc; for (int i = 0; i < gen_args.Count; i++) { - ts.AddGenericInstanceParameter(gen_args[i].si.name); - ts.AddGenericInstanciation(gen_args[i]); + TypeScope gen_arg = gen_args[i]; + if (gen_arg.instances != null && gen_arg.original_type != null) + { + if (gen_arg.original_type.generic_params != null && this.generic_params != null) + for (int j = 0; j < gen_arg.original_type.generic_params.Count; j++) + { + if (string.Compare(gen_arg.original_type.generic_params[j], this.generic_params[j], true) == 0) + { + ts.AddGenericInstanceParameter(gen_arg.instances[j].si.name); + ts.AddGenericInstanciation(gen_arg.instances[j]); + } + } + } + else + { + ts.AddGenericInstanceParameter(gen_args[i].si.name); + ts.AddGenericInstanciation(gen_args[i]); + } + } ts.si.name = this.si.name; ts.documentation = this.documentation; @@ -5590,6 +5607,11 @@ namespace CodeCompletion } } + protected override TypeScope simpleGetInstance(List gen_args) + { + return this.GetInstance(gen_args); + } + public override TypeScope GetInstance(List gen_args, bool exact = false) { Type t = this.ctn; diff --git a/TestSuite/intellisense_tests/generics22.pas b/TestSuite/intellisense_tests/generics22.pas new file mode 100644 index 000000000..28e1e484a --- /dev/null +++ b/TestSuite/intellisense_tests/generics22.pas @@ -0,0 +1,17 @@ +type + t0 = class + + l: List<(T, byte)>; + + end; + + t1 = class(t0) + + public procedure p1; + begin + l{@var t0<>.l: List>;@} := l; + end; + + end; + +begin end. \ No newline at end of file