improvements in intellisense (choose overloaded method)
This commit is contained in:
parent
b22d915b61
commit
8f55b16c22
|
|
@ -2163,72 +2163,72 @@ namespace CodeCompletion
|
|||
_with_statement.what_do.visit(this);
|
||||
cur_scope = tmp;
|
||||
}
|
||||
|
||||
|
||||
internal static bool is_good_overload(ProcScope ps, List<SymScope> args)
|
||||
{
|
||||
if (ps.parameters == null || ps.parameters.Count == 0)
|
||||
if (args.Count == 0)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
if (args.Count == 0)
|
||||
if (ps.parameters.Count == 1 && ps.parameters[0].param_kind == parametr_kind.params_parametr)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
if (args.Count == ps.parameters.Count || ps.IsExtension && args.Count == ps.parameters.Count - 1)
|
||||
{
|
||||
if (ps.parameters == null || ps.parameters.Count == 0)
|
||||
if (args.Count == 0)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
if (args.Count == 0)
|
||||
if (ps.parameters.Count == 1 && ps.parameters[0].param_kind == parametr_kind.params_parametr)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
if (args.Count == ps.parameters.Count || ps.IsExtension && args.Count == ps.parameters.Count - 1)
|
||||
{
|
||||
int off = 0;
|
||||
if (ps.IsExtension && args.Count == ps.parameters.Count - 1)
|
||||
off = 1;
|
||||
for (int i=0; i<args.Count; i++)
|
||||
{
|
||||
for (int i = 0; i < args.Count; i++)
|
||||
{
|
||||
if (args[i] is UnknownScope)
|
||||
continue;
|
||||
if (!(args[i] is TypeScope))
|
||||
return false;
|
||||
TypeScope ts = args[i] as TypeScope;
|
||||
if (!(args[i] is TypeScope))
|
||||
return false;
|
||||
TypeScope ts = args[i] as TypeScope;
|
||||
ElementScope parameter = ps.parameters[i + off];
|
||||
if (!ts.IsConvertable(parameter.sc as TypeScope))
|
||||
{
|
||||
if (parameter.param_kind == parametr_kind.params_parametr)
|
||||
{
|
||||
if (!(parameter.sc is TypeScope && (parameter.sc as TypeScope).IsArray && ts.IsConvertable((parameter.sc as TypeScope).elementType)))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (args.Count < ps.parameters.Count)
|
||||
return false;
|
||||
int min_arg_cnt = Math.Min(args.Count,ps.parameters.Count);
|
||||
|
||||
for (int i=0; i<min_arg_cnt; i++)
|
||||
{
|
||||
if (!(args[i] is TypeScope))
|
||||
return false;
|
||||
TypeScope ts = args[i] as TypeScope;
|
||||
if (!ts.IsConvertable(ps.parameters[i].sc as TypeScope))
|
||||
{
|
||||
if (ps.parameters[i].param_kind == parametr_kind.params_parametr)
|
||||
{
|
||||
if (!(ps.parameters[i].sc is ArrayScope && ts.IsConvertable((ps.parameters[i].sc as ArrayScope).elementType)))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
else if (i == ps.parameters.Count-1 && ps.parameters[i].param_kind != parametr_kind.params_parametr)
|
||||
return false;
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
{
|
||||
if (parameter.param_kind == parametr_kind.params_parametr)
|
||||
{
|
||||
if (!(parameter.sc is TypeScope && (parameter.sc as TypeScope).IsArray && ts.IsConvertable((parameter.sc as TypeScope).elementType)))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (args.Count < ps.parameters.Count)
|
||||
return false;
|
||||
int min_arg_cnt = Math.Min(args.Count, ps.parameters.Count);
|
||||
|
||||
for (int i = 0; i < min_arg_cnt; i++)
|
||||
{
|
||||
if (!(args[i] is TypeScope))
|
||||
return false;
|
||||
TypeScope ts = args[i] as TypeScope;
|
||||
if (!ts.IsConvertable(ps.parameters[i].sc as TypeScope))
|
||||
{
|
||||
if (ps.parameters[i].param_kind == parametr_kind.params_parametr)
|
||||
{
|
||||
if (!(ps.parameters[i].sc is ArrayScope && ts.IsConvertable((ps.parameters[i].sc as ArrayScope).elementType)))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
else if (i == ps.parameters.Count - 1 && ps.parameters[i].param_kind != parametr_kind.params_parametr)
|
||||
return false;
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
internal static bool is_good_exact_overload(ProcScope ps, List<SymScope> args)
|
||||
|
|
|
|||
|
|
@ -3014,7 +3014,7 @@ namespace CodeCompletion
|
|||
{
|
||||
return this.indexes.Length == arrs.indexes.Length;
|
||||
}
|
||||
return false;
|
||||
return true;
|
||||
/*if (this.indexes == null && arrs.indexes == null) return true;//?????
|
||||
if (this.indexes != null && arrs.indexes != null)
|
||||
{
|
||||
|
|
@ -4849,34 +4849,38 @@ namespace CodeCompletion
|
|||
return this.IsConvertable((ts as TypeSynonim).actType);
|
||||
else
|
||||
if (ts is ShortStringScope && ctn == typeof(string))
|
||||
return true;
|
||||
else
|
||||
{
|
||||
if (ts is UnknownScope)
|
||||
return true;
|
||||
else
|
||||
else if (ts is ProcType)
|
||||
{
|
||||
if (ts is UnknownScope)
|
||||
return true;
|
||||
else if (ts is ProcType)
|
||||
ProcType pt = ts as ProcType;
|
||||
MethodInfo invoke_meth = this.ctn.GetMethod("Invoke");
|
||||
if (invoke_meth == null)
|
||||
{
|
||||
ProcType pt = ts as ProcType;
|
||||
MethodInfo invoke_meth = this.ctn.GetMethod("Invoke");
|
||||
if (invoke_meth == null)
|
||||
return false;
|
||||
if (pt.target.parameters == null)
|
||||
if (invoke_meth.GetParameters().Length > 0)
|
||||
return false;
|
||||
if (pt.target.parameters != null && pt.target.parameters.Count != invoke_meth.GetParameters().Length)
|
||||
return false;
|
||||
ParameterInfo[] parameters = invoke_meth.GetParameters();
|
||||
for (int i=0; i<parameters.Length; i++)
|
||||
{
|
||||
CompiledScope param_cs = TypeTable.get_compiled_type(new SymInfo(null, SymbolKind.Type, null), parameters[i].ParameterType);
|
||||
if (!(pt.target.parameters[i].sc is TypeScope) || !param_cs.IsConvertable(pt.target.parameters[i].sc as TypeScope))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (this.ctn == typeof(Delegate))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
if (pt.target.parameters == null)
|
||||
if (invoke_meth.GetParameters().Length > 0)
|
||||
return false;
|
||||
if (pt.target.parameters != null && pt.target.parameters.Count != invoke_meth.GetParameters().Length)
|
||||
return false;
|
||||
ParameterInfo[] parameters = invoke_meth.GetParameters();
|
||||
for (int i = 0; i < parameters.Length; i++)
|
||||
{
|
||||
CompiledScope param_cs = TypeTable.get_compiled_type(new SymInfo(null, SymbolKind.Type, null), parameters[i].ParameterType);
|
||||
if (!(pt.target.parameters[i].sc is TypeScope) || !param_cs.IsConvertable(pt.target.parameters[i].sc as TypeScope))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
if (this.ctn == cs.ctn)
|
||||
return true;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue