/// <summary> /// Получение имен после точки /// </summary> public SymInfo[] GetName(expression expr, string str, int line, int col, PascalABCCompiler.Parsers.KeywordKind keyword, ref SymScope root) { if (stv.cur_scope == null) return null; if (col + 1 > str.Length) col -= str.Length; SymScope si = stv.FindScopeByLocation(line + 1, col + 1);//stv.cur_scope; if (si == null) { si = stv.FindScopeByLocation(line, col + 1); if (si == null) return null; } SetCurrentUsedAssemblies(); ExpressionVisitor ev = new ExpressionVisitor(expr, si, stv); si = ev.GetScopeOfExpression(true, false); root = si; if (si is ElementScope) root = (si as ElementScope).sc; else if (si is ProcScope) root = (si as ProcScope).return_type; if (si != null) { if (!(si is TypeScope) && !(si is NamespaceScope)) { SymInfo[] syms = si.GetNamesAsInObject(ev); SymInfo[] ext_syms = null; if (si is ElementScope) ext_syms = stv.cur_scope.GetSymInfosForExtensionMethods((si as ElementScope).sc as TypeScope); List<SymInfo> lst = new List<SymInfo>(); lst.AddRange(syms); if (ext_syms != null) lst.AddRange(ext_syms); RestoreCurrentUsedAssemblies(); return lst.ToArray(); } else { if (si is TypeScope) { RestoreCurrentUsedAssemblies(); return (si as TypeScope).GetNames(ev, keyword, false); } else { if (ev.entry_scope.InUsesRange(line + 1, col + 1)) keyword = PascalABCCompiler.Parsers.KeywordKind.Uses; RestoreCurrentUsedAssemblies(); return (si as NamespaceScope).GetNames(ev, keyword); } } } RestoreCurrentUsedAssemblies(); return null; }
// public override SymInfo[] GetNames(ExpressionVisitor ev) // { // List<SymInfo> lst = new List<SymInfo>(); // for (int i=0; i<with_scopes.Count; i++) // { // if (!with_scopes[i].is_type) // lst.AddRange(with_scopes[i].ss.GetNamesAsInObject(ev)); // else // lst.AddRange((with_scopes[i].ss as TypeScope).GetNames(ev,PascalABCCompiler.Parsers.KeywordKind.None)); // } // lst.AddRange(topScope.GetNames(ev)); // return lst.ToArray(); // } public override SymInfo[] GetNamesInAllTopScopes(bool all_names, ExpressionVisitor ev, bool is_static) { List<SymInfo> lst = new List<SymInfo>(); for (int i = 0; i < with_scopes.Count; i++) { if (!with_scopes[i].is_type) lst.AddRange(with_scopes[i].ss.GetNamesAsInObject(ev)); else lst.AddRange((with_scopes[i].ss as TypeScope).GetNames(ev, PascalABCCompiler.Parsers.KeywordKind.None, false)); } lst.AddRange(topScope.GetNamesInAllTopScopes(all_names, ev, is_static)); return lst.ToArray(); }
public override SymInfo[] GetNamesAsInObject(ExpressionVisitor ev) { return new SymInfo[0]; }
public override SymInfo[] GetNamesAsInObject(ExpressionVisitor ev) { List<SymInfo> syms = new List<SymInfo>(); if (!CodeCompletionController.CurrentParser.LanguageInformation.IncludeDotNetEntities) return syms.ToArray(); MemberInfo[] mis = ctn.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.FlattenHierarchy); List<MemberInfo> members = new List<MemberInfo>(); members.AddRange(mis); IEnumerable<MemberInfo> en = PascalABCCompiler.NetHelper.NetHelper.GetExtensionMethods(ctn); members.AddRange(en); mis = members.ToArray(); if (ctn.IsInterface) { List<MemberInfo> mems = new List<MemberInfo>(); mems.AddRange(mis); mems.AddRange(typeof(object).GetMembers(BindingFlags.Public | BindingFlags.Instance)); Type[] types = ctn.GetInterfaces(); foreach (Type t in types) mems.AddRange(t.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.FlattenHierarchy)); mis = mems.ToArray(); } foreach (MemberInfo mi in mis) if (!mi.Name.Contains("$")) switch (mi.MemberType) { case MemberTypes.Method: if (!(mi as MethodInfo).IsSpecialName) { SymInfo si2 = new SymInfo(null, SymbolKind.Method, null); si2 = new CompiledMethodScope(si2, mi as MethodInfo, this).si; if (si2.acc_mod == access_modifer.protected_modifer) { if (ev.CheckForBaseAccess(ev.entry_scope, this)) syms.Add(si2); } else if (si2.acc_mod != access_modifer.private_modifer && si2.acc_mod != access_modifer.internal_modifer) syms.Add(si2); } break; case MemberTypes.Field: { if (!(mi as FieldInfo).IsSpecialName) { SymInfo si2 = new SymInfo(null, SymbolKind.Field, null); if ((mi as FieldInfo).IsLiteral) si2.kind = SymbolKind.Constant; si2 = new CompiledFieldScope(si2, mi as FieldInfo, this).si; if (si2.acc_mod == access_modifer.protected_modifer) { if (ev.CheckForBaseAccess(ev.entry_scope, this)) syms.Add(si2); } else if (si2.acc_mod != access_modifer.private_modifer && si2.acc_mod != access_modifer.internal_modifer) syms.Add(si2); } } break; case MemberTypes.Property: { SymInfo si2 = new SymInfo(null, SymbolKind.Property, null); si2 = new CompiledPropertyScope(si2, mi as PropertyInfo, this).si; if (si2.acc_mod == access_modifer.protected_modifer) { if (ev.CheckForBaseAccess(ev.entry_scope, this)) syms.Add(si2); } else if (si2.acc_mod != access_modifer.private_modifer && si2.acc_mod != access_modifer.internal_modifer) syms.Add(si2); } break; case MemberTypes.Event: { SymInfo si2 = new SymInfo(null, SymbolKind.Event, null); si2 = new CompiledEventScope(si2, mi as EventInfo, this).si; if (si2.acc_mod == access_modifer.protected_modifer) { if (ev.CheckForBaseAccess(ev.entry_scope, this)) syms.Add(si2); } else if (si2.acc_mod != access_modifer.private_modifer && si2.acc_mod != access_modifer.internal_modifer) syms.Add(si2); } break; } if (implemented_interfaces != null && false) { foreach (TypeScope ts in implemented_interfaces) syms.AddRange(ts.GetNamesAsInObject(ev)); } return syms.ToArray(); }
public virtual SymInfo[] GetNamesAsInBaseClass(ExpressionVisitor ev, bool is_static) { return new SymInfo[0]; }
//poluchit imena s klassa s kluchevym slovom //vyzyvaetsja, kogda procedure TClass. tut vse ekzemplarnye i staticheskie public virtual SymInfo[] GetNames(ExpressionVisitor ev, PascalABCCompiler.Parsers.KeywordKind keyword, bool called_in_base) { List<SymInfo> lst = new List<SymInfo>(); foreach (SymScope ss in members) { if (!ss.si.name.StartsWith("$")) { if (keyword != PascalABCCompiler.Parsers.KeywordKind.Function && keyword != PascalABCCompiler.Parsers.KeywordKind.Constructor && keyword != PascalABCCompiler.Parsers.KeywordKind.Destructor/*!(ev.entry_scope is InterfaceUnitScope) && !(ev.entry_scope is ImplementationUnitScope)*/) { if (ss.si.acc_mod == access_modifer.private_modifer) { if (ss.is_static && ev.CheckPrivateForBaseAccess(ev.entry_scope, this)) lst.Add(ss.si); } else if (ss.si.acc_mod == access_modifer.protected_modifer) { if (ss.is_static && ev.CheckForBaseAccess(ev.entry_scope, this)) lst.Add(ss.si); } else if (ss.is_static) lst.Add(ss.si); else if ((ss is ProcScope) && (ss as ProcScope).IsConstructor()) if (!((ss as ProcScope).parameters == null || (ss as ProcScope).parameters.Count == 0) || !called_in_base) lst.Add(ss.si); } else { if (ss is ProcScope && !(ss as ProcScope).already_defined) { if (keyword == PascalABCCompiler.Parsers.KeywordKind.Function || keyword == PascalABCCompiler.Parsers.KeywordKind.Destructor) lst.Add(ss.si); else if ((ss as ProcScope).IsConstructor()) lst.Add(ss.si); } } if (!ss.si.has_doc) UnitDocCache.AddDescribeToComplete(ss); } } if (baseScope != null && keyword != PascalABCCompiler.Parsers.KeywordKind.Constructor && keyword != PascalABCCompiler.Parsers.KeywordKind.Destructor) lst.AddRange(baseScope.GetNames(ev, keyword, true)); /*if (topScope != null) lst.AddRange(topScope.GetNames());*/ return lst.ToArray(); }
public SymInfo[] GetNames(ExpressionVisitor ev, PascalABCCompiler.Parsers.KeywordKind keyword) { List<SymInfo> syms = new List<SymInfo>(); Type[] types = PascalABCCompiler.NetHelper.NetHelper.FindTypesInNamespace(name); string[] ns = PascalABCCompiler.NetHelper.NetHelper.FindSubNamespaces(name); Hashtable ht = new Hashtable(); if (keyword != PascalABCCompiler.Parsers.KeywordKind.Uses) if (types != null) foreach (Type t in types) { if (!t.IsNotPublic && !t.IsSpecialName && t.IsVisible && !t.Name.Contains("$") && !t.IsNested) { if (t.BaseType == typeof(MulticastDelegate)) //syms.Add(new CompiledScope(new SymInfo(TypeUtility.GetShortTypeName(t), SymbolKind.Delegate, "delegate "+TypeUtility.GetTypeName(t) + "\n" + AssemblyDocCache.GetDocumentation(t)),t)); syms.Add(TypeTable.get_compiled_type(new SymInfo(null, SymbolKind.Delegate, null), t).si); else if (t.IsClass) //syms.Add(new SymInfo(TypeUtility.GetShortTypeName(t), SymbolKind.Type, "class "+TypeUtility.GetTypeName(t)+ "\n" +AssemblyDocCache.GetDocumentation(t))); syms.Add(TypeTable.get_compiled_type(new SymInfo(null, SymbolKind.Class, null), t).si); else if (t.IsInterface) //syms.Add(new SymInfo(TypeUtility.GetShortTypeName(t), SymbolKind.Interface, "interface "+TypeUtility.GetTypeName(t)+ "\n" +AssemblyDocCache.GetDocumentation(t))); syms.Add(TypeTable.get_compiled_type(new SymInfo(null, SymbolKind.Interface, null), t).si); else if (t.IsEnum) //syms.Add(new SymInfo(TypeUtility.GetShortTypeName(t), SymbolKind.Enum, "enum "+TypeUtility.GetTypeName(t)+ "\n" +AssemblyDocCache.GetDocumentation(t))); syms.Add(TypeTable.get_compiled_type(new SymInfo(null, SymbolKind.Enum, null), t).si); else if (t.IsValueType) //syms.Add(new SymInfo(TypeUtility.GetShortTypeName(t), SymbolKind.Struct, "record "+TypeUtility.GetTypeName(t)+ "\n" +AssemblyDocCache.GetDocumentation(t))); syms.Add(TypeTable.get_compiled_type(new SymInfo(null, SymbolKind.Struct, null), t).si); } } if (ns != null) foreach (string s in ns) { if (!s.Contains(".") && !s.Contains("$")) syms.Add(new SymInfo(s, SymbolKind.Namespace, "")); } if (syms.Count != 0) return syms.ToArray(); return null; }
public override SymInfo[] GetNamesInAllTopScopes(bool all_names, ExpressionVisitor ev, bool is_static) { List<SymInfo> lst = new List<SymInfo>(); /*foreach (string s in ht.Keys) { SymScope sc = ht[s] as SymScope; lst.Add(sc.si); }*/ foreach (SymScope ss in members) if (ss != this && !ss.si.name.StartsWith("$")) { if (ss.loc != null && loc != null) { if (string.Compare(ss.loc.doc.file_name, loc.doc.file_name, true) == 0) { if (IsAfterDefinition(ss.loc.begin_line_num, ss.loc.begin_column_num)) { lst.Add(ss.si); } } else lst.Add(ss.si); } else lst.Add(ss.si); if (!ss.si.has_doc) UnitDocCache.AddDescribeToComplete(ss); } if (topScope != null) lst.AddRange(topScope.GetNamesInAllTopScopes(all_names, ev, this.is_static)); //if (proc_realization != null && proc_realization.top_mod_scope != null) lst.AddRange(proc_realization.top_mod_scope.GetNamesInAllTopScopes(all_names,ev,is_static)); return lst.ToArray(); }
public override SymInfo[] GetNames(ExpressionVisitor ev, PascalABCCompiler.Parsers.KeywordKind keyword, bool called_in_base) { if (this.baseScope != null) return this.baseScope.GetNames(ev, keyword, called_in_base); return null; }
public override SymInfo[] GetNamesAsInObject(ExpressionVisitor ev) { return def_proc.GetNamesAsInObject(ev); }
// public override SymInfo[] GetNames(ExpressionVisitor ev) // { // List<SymInfo> names = new List<SymInfo>(); // names.AddRange(def_proc.GetNames(ev)); // if (top_mod_scope != null) // names.AddRange(top_mod_scope.GetNames(ev)); // return names.ToArray(); // } public override SymInfo[] GetNamesInAllTopScopes(bool all_names, ExpressionVisitor ev, bool is_static) { List<SymInfo> names = new List<SymInfo>(); //names.AddRange(def_proc.GetNamesInAllTopScopes(all_names,ev,is_static)); names.AddRange(def_proc.GetNames()); if (top_mod_scope != null) names.AddRange(top_mod_scope.GetNamesInAllTopScopes(all_names, ev, is_static)); return names.ToArray(); }
/// <summary> /// Получить подсказку параметров метода /// </summary> public string[] GetNameOfMethod(expression expr, string str, int line, int col, int num_param,ref int defIndex, int choose_param_num, out int param_count) { param_count = 0; if (stv.cur_scope == null) return null; if (col +1 > str.Length) col -= str.Length; SymScope si = stv.FindScopeByLocation(line+1,col+1);//stv.cur_scope; if (si == null) { si = stv.FindScopeByLocation(line,col+1); if (si == null) return null; } SetCurrentUsedAssemblies(); ExpressionVisitor ev = new ExpressionVisitor(expr, si, stv); List<ProcScope> scopes = ev.GetOverloadScopes(); bool was_empty_params = false; if (scopes.Count == 0) { RestoreCurrentUsedAssemblies(); return null; } si = scopes[0]; //if (si is ElementScope && (si as ElementScope).sc is ProcScope) si = (si as ElementScope).sc as ProcScope; //if (si is ElementScope && (si as ElementScope).sc is ProcType) si = ((si as ElementScope).sc as ProcType).target; if (si != null && si is ProcScope) { List<string> procs = new List<string>(); List<ProcScope> proc_defs = new List<ProcScope>(); ProcScope ps = si as ProcScope; int i = 0; bool stop = false; ProcScope tmp = ps; while (i < scopes.Count) { if (i == defIndex) { if (tmp.GetParametersCount() != 0) { choose_param_num = tmp.GetParametersCount(); param_count = choose_param_num; } break; } i++; tmp = scopes[i]; } i = 0; while (ps != null) { //if (!ps.si.name.StartsWith("$")) //if (!stop && ((ps.GetParametersCount() >= num_param) || ps.GetParametersCount() == 0 && num_param == 1 && choose_param_num==1)) //if (i == defIndex) param_count = ps.GetParametersCount(); if (!stop && num_param > choose_param_num && ps.GetParametersCount() >= num_param && ps.GetParametersCount() > choose_param_num) { //if (ps.GetParametersCount() >= choose_param_num && choose_param_num == 1 || choose_param_num > 1 && ps.GetParametersCount() > choose_param_num) { defIndex = i; stop = true; param_count = ps.GetParametersCount(); } //System.Diagnostics.Debug.WriteLine(defIndex); } if (ps is CompiledMethodScope) ps.AddDocumentation(AssemblyDocCache.GetDocumentation((ps as CompiledMethodScope).mi)); else if (ps is CompiledConstructorScope) ps.AddDocumentation(AssemblyDocCache.GetDocumentation((ps as CompiledConstructorScope).mi)); else if (ps is ProcScope) { if (!ps.si.has_doc) { ps.AddDocumentation(UnitDocCache.GetDocumentation(ps as ProcScope)); } } if (ps.acc_mod == access_modifer.protected_modifer || ps.acc_mod == access_modifer.private_modifer) { if (ps.acc_mod == access_modifer.private_modifer) { if (ev.IsInOneModule(ev.entry_scope,ps.topScope)) if (!ps.si.not_include && !equal_params(ps,proc_defs)) { procs.Add(ps.si.description); proc_defs.Add(ps); } } else if (ev.CheckForBaseAccess(ev.entry_scope,ps.topScope)) if (!ps.si.not_include && !equal_params(ps,proc_defs)) { procs.Add(ps.si.description); proc_defs.Add(ps); } } else if (!ps.si.not_include) /*if (ps.GetParametersCount() == 0) { if (!was_empty_params) { procs.Add(ps.si.describe); proc_defs.Add(ps); was_empty_params = true; } }*/ if (!equal_params(ps,proc_defs)) { procs.Add(ps.si.description); proc_defs.Add(ps); } i++; if (i<scopes.Count) ps = scopes[i]; else ps = null; } RestoreCurrentUsedAssemblies(); return procs.ToArray(); } RestoreCurrentUsedAssemblies(); return null; }
/// <summary> /// Получить подсказку индекса /// </summary> public string[] GetIndex(expression expr, int line, int col) { if (stv.cur_scope == null) return null; SymScope si = stv.FindScopeByLocation(line+1,col+1);//stv.cur_scope; if (si == null) { si = stv.FindScopeByLocation(line,col+1); if (si == null) return null; } ExpressionVisitor ev = new ExpressionVisitor(expr, si, stv); si = ev.GetScopeOfExpression(false,true); return CodeCompletionController.CurrentParser.LanguageInformation.GetIndexerString(si); }
/// <summary> /// Получить описание элемента при наведении мышью /// </summary> public string GetDescription(expression expr, string FileName, string expr_without_brackets, PascalABCCompiler.Parsers.Controller parser, int line, int col, PascalABCCompiler.Parsers.KeywordKind keyword, bool header) { if (stv.cur_scope == null) return null; SymScope ss = stv.FindScopeByLocation(line+1,col+1);//stv.cur_scope; if (ss == null) return null; if (!header && ss.IsInScope(ss.head_loc,line+1,col+1)) { List<PascalABCCompiler.Errors.Error> Errors = new List<PascalABCCompiler.Errors.Error>(); expr = parser.GetExpression("test"+Path.GetExtension(FileName), expr_without_brackets, Errors); if (expr == null || Errors.Count > 0) return null; } bool on_proc = false; SetCurrentUsedAssemblies(); if (keyword == PascalABCCompiler.Parsers.KeywordKind.Function || keyword == PascalABCCompiler.Parsers.KeywordKind.Constructor || keyword == PascalABCCompiler.Parsers.KeywordKind.Destructor) { if (ss is ProcRealization) { if (expr is ident) { if ((expr as ident).name == (ss as ProcRealization).def_proc.si.name) on_proc = true; } else on_proc = true; } else if (ss is ProcScope) { if (expr is ident) { if ((expr as ident).name == (ss as ProcScope).si.name) on_proc = true; } else on_proc = true; } } //if (!((keyword == KeywordKind.kw_proc || keyword == KeywordKind.kw_constr || keyword == KeywordKind.kw_destr) && ss is ProcScope)) if (!on_proc) { ExpressionVisitor ev = new ExpressionVisitor(expr, ss, stv); ev.mouse_hover = true; ss = ev.GetScopeOfExpression(); } if (ss != null && ss.si != null) { try { if (ss.si.has_doc != true) if (ss is CompiledScope) ss.AddDocumentation(AssemblyDocCache.GetDocumentation((ss as CompiledScope).ctn)); else if (ss is CompiledMethodScope) ss.AddDocumentation(AssemblyDocCache.GetDocumentation((ss as CompiledMethodScope).mi)); else if (ss is CompiledPropertyScope) ss.AddDocumentation(AssemblyDocCache.GetDocumentation((ss as CompiledPropertyScope).pi)); else if (ss is CompiledFieldScope) ss.AddDocumentation(AssemblyDocCache.GetDocumentation((ss as CompiledFieldScope).fi)); else if (ss is CompiledEventScope) ss.AddDocumentation(AssemblyDocCache.GetDocumentation((ss as CompiledEventScope).ei)); else if (ss is CompiledConstructorScope) ss.AddDocumentation(AssemblyDocCache.GetDocumentation((ss as CompiledConstructorScope).mi)); else if (ss is NamespaceScope) ss.AddDocumentation(AssemblyDocCache.GetDocumentationForNamespace((ss as NamespaceScope).name)); else if (ss is TypeScope) ss.AddDocumentation(UnitDocCache.GetDocumentation(ss as TypeScope)); else if (ss is ProcScope) ss.AddDocumentation(UnitDocCache.GetDocumentation(ss as ProcScope)); else if (ss is InterfaceUnitScope) ss.AddDocumentation(UnitDocCache.GetDocumentation(ss as InterfaceUnitScope)); else if (ss is ElementScope && string.IsNullOrEmpty(ss.si.description) && (ss as ElementScope).sc is TypeScope) ss.si.description = (ss as ElementScope).sc.Description; } catch (Exception e) { } RestoreCurrentUsedAssemblies(); string description = ss.si.description; if (description != null) description = description.Replace("!#",""); return description; } RestoreCurrentUsedAssemblies(); return null; }
public override SymInfo[] GetNamesAsInObject(ExpressionVisitor ev) { //SortedDictionary<string,SymInfo> dict = new SortedDictionary<string,SymInfo>(); return new SymInfo[0]; }
public override SymInfo[] GetNamesAsInObject(ExpressionVisitor ev) { //SortedDictionary<string,SymInfo> dict = new SortedDictionary<string,SymInfo>(); if (this.baseScope != null) return this.baseScope.GetNamesAsInObject(ev); return new SymInfo[0]; }
//esli naprimer nazhali ctrl-probel(all_name = treu) ili shift-probel (all_names = false) //visitor vsegda nuzhen tak kak hranit scope, gde my nazhali public override SymInfo[] GetNamesInAllTopScopes(bool all_names, ExpressionVisitor ev, bool is_static) { List<SymInfo> lst = new List<SymInfo>(); foreach (SymScope ss in members) { if (ss is ProcScope && (ss as ProcScope).IsConstructor()) continue; if (!ss.si.name.StartsWith("$")) { if (ss.si.acc_mod == access_modifer.private_modifer) { if (ev.CheckPrivateForBaseAccess(ev.entry_scope, this)) if (!is_static) lst.Add(ss.si); else if (ss.is_static) lst.Add(ss.si); } else if (ss.si.acc_mod == access_modifer.protected_modifer) { if (ev.CheckForBaseAccess(ev.entry_scope, this)) if (!is_static) lst.Add(ss.si); else if (ss.is_static) lst.Add(ss.si); } else if (!is_static) lst.Add(ss.si); else if (ss.is_static) lst.Add(ss.si); if (!ss.si.has_doc) UnitDocCache.AddDescribeToComplete(ss); } } if (baseScope != null) lst.AddRange(baseScope.GetNamesAsInBaseClass(ev, is_static)); if (topScope != null) lst.AddRange(topScope.GetNamesInAllTopScopes(all_names, ev, is_static)); return lst.ToArray(); }
public override SymInfo[] GetNamesAsInBaseClass(ExpressionVisitor ev, bool is_static) { if (this.baseScope != null) return baseScope.GetNamesAsInBaseClass(ev, is_static); return null; }
//poluchit vse imena kak po tochke iz objektnoj peremennoj, sootv. ekzemplarnye chleny klassa i nadklassov public override SymInfo[] GetNamesAsInObject(ExpressionVisitor ev) { //if (original_type != null) // return original_type.GetNamesAsInObject(ev); List<SymInfo> lst = new List<SymInfo>(); foreach (SymScope ss in members) { if (ss is ProcScope && (ss as ProcScope).IsConstructor()) continue; if (!ss.si.name.StartsWith("$") && !ss.is_static && !(ss is TemplateParameterScope)) { if (ss.si.acc_mod == access_modifer.private_modifer) { if (ev.CheckPrivateForBaseAccess(ev.entry_scope, this)) lst.Add(ss.si); } else if (ss.si.acc_mod == access_modifer.protected_modifer) { if (ev.CheckForBaseAccess(ev.entry_scope, this)) lst.Add(ss.si); } else lst.Add(ss.si); if (!ss.si.has_doc) UnitDocCache.AddDescribeToComplete(ss); } } if (this.documentation != null && this.documentation.Contains("!#") && baseScope is CompiledScope) return lst.ToArray(); if (baseScope != null) { lst.AddRange(baseScope.GetNamesAsInObject(ev)); } if (implemented_interfaces != null && !(this is ArrayScope && (this as ArrayScope).IsMultiDynArray)) foreach (TypeScope ts in implemented_interfaces) lst.AddRange(ts.GetNamesAsInObject(ev)); return lst.ToArray(); }
public override SymInfo[] GetNamesAsInBaseClass(ExpressionVisitor ev, bool is_static) { return actType.GetNamesAsInBaseClass(ev, is_static); }
public override SymInfo[] GetNames(ExpressionVisitor ev, PascalABCCompiler.Parsers.KeywordKind keyword, bool called_in_base) { List<SymInfo> syms = new List<SymInfo>(); if (!CodeCompletionController.CurrentParser.LanguageInformation.IncludeDotNetEntities) return syms.ToArray(); MemberInfo[] mis = ctn.GetMembers(BindingFlags.Public | BindingFlags.NonPublic |/*BindingFlags.Instance|*/BindingFlags.Static | BindingFlags.FlattenHierarchy); List<MemberInfo> constrs = new List<MemberInfo>(); //constrs.AddRange(ctn.GetNestedTypes(BindingFlags.Public)); //if (ctn != typeof(object)) ConstructorInfo[] cis = ctn.GetConstructors(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (ConstructorInfo ci in cis) if (!called_in_base) constrs.Add(ci); else if (ci.GetParameters().Length > 0) constrs.Add(ci); constrs.AddRange(mis); //constrs.AddRange(PascalABCCompiler.NetHelper.NetHelper.GetExtensionMethods(ctn)); mis = constrs.ToArray(); if (ctn.IsInterface) { return syms.ToArray(); } foreach (MemberInfo mi in mis) if (!mi.Name.Contains("$")) switch (mi.MemberType) { case MemberTypes.Method: if (!(mi as MethodInfo).IsSpecialName && (mi as MethodInfo).IsStatic) { SymInfo si2 = new SymInfo(null, SymbolKind.Method, null); CompiledMethodScope member = new CompiledMethodScope(si2, mi as MethodInfo, this); si2 = member.si; if (si2.acc_mod == access_modifer.protected_modifer) { if (ev.CheckForBaseAccess(ev.entry_scope, this)) syms.Add(si2); } else if (si2.acc_mod != access_modifer.private_modifer && si2.acc_mod != access_modifer.internal_modifer) syms.Add(si2); } break; case MemberTypes.Field: { if (!(mi as FieldInfo).IsSpecialName && (mi as FieldInfo).IsStatic) { SymInfo si2 = new SymInfo(null, SymbolKind.Field, null); if ((mi as FieldInfo).IsLiteral) si2.kind = SymbolKind.Constant; si2 = new CompiledFieldScope(si2, mi as FieldInfo, this).si; if (si2.acc_mod == access_modifer.protected_modifer) { if (ev.CheckForBaseAccess(ev.entry_scope, this)) syms.Add(si2); } else if (si2.acc_mod != access_modifer.private_modifer && si2.acc_mod != access_modifer.internal_modifer) syms.Add(si2); } } break; case MemberTypes.Constructor: { SymInfo si2 = new SymInfo(null, SymbolKind.Method, null); CompiledConstructorScope member = new CompiledConstructorScope(si2, mi as ConstructorInfo, this); si2 = member.si; if (si2.acc_mod == access_modifer.protected_modifer) { if (ev.CheckForBaseAccess(ev.entry_scope, this)) syms.Add(si2); } else if (si2.acc_mod != access_modifer.private_modifer && si2.acc_mod != access_modifer.internal_modifer) syms.Add(si2); } break; case MemberTypes.Property: { PropertyInfo pi = mi as PropertyInfo; if (pi.GetGetMethod(true) != null && pi.GetGetMethod(true).IsStatic) { SymInfo si2 = new SymInfo(null, SymbolKind.Property, null); si2 = new CompiledPropertyScope(si2, mi as PropertyInfo, this).si; if (si2.acc_mod == access_modifer.protected_modifer) { if (ev.CheckForBaseAccess(ev.entry_scope, this)) syms.Add(si2); } else if (si2.acc_mod != access_modifer.private_modifer && si2.acc_mod != access_modifer.internal_modifer) syms.Add(si2); } } break; case MemberTypes.Event: { MethodInfo acc_mi = (mi as EventInfo).GetAddMethod(true); if (acc_mi != null && acc_mi.IsStatic) { SymInfo si2 = new SymInfo(null, SymbolKind.Event, null); si2 = new CompiledEventScope(si2, mi as EventInfo, this).si; syms.Add(si2); if (si2.acc_mod == access_modifer.protected_modifer) { if (ev.CheckForBaseAccess(ev.entry_scope, this)) syms.Add(si2); } else if (si2.acc_mod != access_modifer.private_modifer && si2.acc_mod != access_modifer.internal_modifer) syms.Add(si2); } } break; case MemberTypes.NestedType: { if ((mi as Type).IsNestedPublic) { SymInfo si2 = new SymInfo(null, SymbolKind.Type, null); CompiledScope member = TypeTable.get_compiled_type(si2, mi as Type); si2 = member.si; syms.Add(si2); } } break; } return syms.ToArray(); }
// public override SymInfo[] GetNames(ExpressionVisitor ev) // { // return actType.GetNamesAsInObject(ev); // } public override SymInfo[] GetNamesAsInObject(ExpressionVisitor ev) { return actType.GetNamesAsInObject(ev); }
public override SymInfo[] GetNamesAsInBaseClass(ExpressionVisitor ev, bool is_static) { List<SymInfo> syms = new List<SymInfo>(); if (!CodeCompletionController.CurrentParser.LanguageInformation.IncludeDotNetEntities) return syms.ToArray(); MemberInfo[] mis = ctn.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.FlattenHierarchy); if (ctn.IsInterface) { List<MemberInfo> mems = new List<MemberInfo>(); mems.AddRange(mis); mems.AddRange(typeof(object).GetMembers()); Type[] types = ctn.GetInterfaces(); foreach (Type t in types) mems.AddRange(t.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.FlattenHierarchy)); mis = mems.ToArray(); } if (!is_static) { foreach (MemberInfo mi in mis) if (!mi.Name.Contains("$")) { switch (mi.MemberType) { case MemberTypes.Method: if (!(mi as MethodInfo).IsSpecialName && ((mi as MethodInfo).IsPublic || (mi as MethodInfo).IsFamily)) { SymInfo si2 = new SymInfo(null, SymbolKind.Method, null); si2 = new CompiledMethodScope(si2, mi as MethodInfo, this).si; syms.Add(si2); } break; case MemberTypes.Field: { if (!(mi as FieldInfo).IsSpecialName && ((mi as FieldInfo).IsPublic || (mi as FieldInfo).IsFamily)) { SymInfo si2 = new SymInfo(null, SymbolKind.Field, null); if ((mi as FieldInfo).IsLiteral) si2.kind = SymbolKind.Constant; si2 = new CompiledFieldScope(si2, mi as FieldInfo, this).si; syms.Add(si2); } //syms.Add(new SymInfo(mi.Name,SymbolKind.Field,mi.Name)); break; } break; case MemberTypes.Property: { PropertyInfo pi = mi as PropertyInfo; MethodInfo acc_mi = pi.GetGetMethod(true); if (acc_mi != null && (acc_mi.IsPublic || acc_mi.IsFamily)) { SymInfo si2 = new SymInfo(null, SymbolKind.Property, null); si2 = new CompiledPropertyScope(si2, mi as PropertyInfo, this).si; syms.Add(si2); } //syms.Add(new SymInfo(mi.Name,SymbolKind.Property,mi.Name)); } break; case MemberTypes.Event: { SymInfo si2 = new SymInfo(null, SymbolKind.Event, null); si2 = new CompiledEventScope(si2, mi as EventInfo, this).si; syms.Add(si2); //syms.Add(new SymInfo(mi.Name,SymbolKind.Event,mi.Name)); } break; } } } else foreach (MemberInfo mi in mis) switch (mi.MemberType) { case MemberTypes.Method: if (!((mi as MethodInfo).IsSpecialName) && (mi as MethodInfo).IsStatic && (mi as MethodInfo).IsPublic || (mi as MethodInfo).IsFamily) { SymInfo si2 = new SymInfo(null, SymbolKind.Method, null); si2 = new CompiledMethodScope(si2, mi as MethodInfo, this).si; syms.Add(si2); } break; case MemberTypes.Field: { if ((mi as FieldInfo).IsStatic && !(mi as FieldInfo).IsSpecialName && (mi as FieldInfo).IsPublic || (mi as FieldInfo).IsFamily) { SymInfo si2 = new SymInfo(null, SymbolKind.Field, null); if ((mi as FieldInfo).IsLiteral) si2.kind = SymbolKind.Constant; si2 = new CompiledFieldScope(si2, mi as FieldInfo, this).si; syms.Add(si2); } //syms.Add(new SymInfo(mi.Name,SymbolKind.Field,mi.Name)); break; } break; case MemberTypes.Property: { PropertyInfo pi = mi as PropertyInfo; MethodInfo acc_mi = pi.GetGetMethod(true); if (acc_mi != null && acc_mi.IsStatic && (acc_mi.IsFamily || acc_mi.IsPublic)) { SymInfo si2 = new SymInfo(null, SymbolKind.Property, null); si2 = new CompiledPropertyScope(si2, mi as PropertyInfo, this).si; syms.Add(si2); } //syms.Add(new SymInfo(mi.Name,SymbolKind.Property,mi.Name)); } break; case MemberTypes.Event: { SymInfo si2 = new SymInfo(null, SymbolKind.Event, null); si2 = new CompiledEventScope(si2, mi as EventInfo, this).si; syms.Add(si2); //syms.Add(new SymInfo(mi.Name,SymbolKind.Event,mi.Name)); } break; } return syms.ToArray(); }
public override SymInfo[] GetNamesInAllTopScopes(bool all_names, ExpressionVisitor ev, bool is_static) { return actType.GetNamesInAllTopScopes(all_names, ev, is_static); }
//poluchenie vseh imen posle tochki public virtual SymInfo[] GetNamesAsInObject(ExpressionVisitor ev) { List<SymInfo> lst = new List<SymInfo>(); foreach (SymScope ss in members) { if (ss != this && !(ss is NamespaceScope) && ss.si.kind != SymbolKind.Namespace && !ss.si.name.Contains("$")) { lst.Add(ss.si); if (!ss.si.has_doc) UnitDocCache.AddDescribeToComplete(ss); } } return lst.ToArray(); }
public override SymInfo[] GetNamesAsInObject(ExpressionVisitor ev) { if (is_dynamic_arr || IsMultiDynArray) { List<SymInfo> syms = new List<SymInfo>(); syms.AddRange(base.GetNamesAsInObject(ev)); if (!IsMultiDynArray && implemented_interfaces != null) { foreach (TypeScope ts in implemented_interfaces) syms.AddRange(ts.GetNamesAsInObject(ev)); } return syms.ToArray(); } return new SymInfo[0]; }
//poluchenie vseh imen vnutri Scope i vo vseh objemlushih scopah //ispolzuetsja pri nazhatii ctrl+space public virtual SymInfo[] GetNamesInAllTopScopes(bool all_names, ExpressionVisitor ev, bool is_static) { List<SymInfo> lst = new List<SymInfo>(); /*foreach (string s in ht.Keys) { SymScope sc = ht[s] as SymScope; lst.Add(sc.si); }*/ foreach (SymScope ss in members) { if (ss != this && !ss.si.name.StartsWith("$")) { if (ss.loc != null && loc != null) { if (string.Compare(ss.loc.doc.file_name, loc.doc.file_name, true) == 0) { if (IsAfterDefinition(ss.loc.begin_line_num, ss.loc.begin_column_num)) { lst.Add(ss.si); } } else lst.Add(ss.si); } else lst.Add(ss.si); if (!ss.si.has_doc) UnitDocCache.AddDescribeToComplete(ss); } } if (topScope != null) lst.AddRange(topScope.GetNamesInAllTopScopes(all_names, ev, is_static)); if (used_units != null && all_names) for (int i = 0; i < used_units.Count; i++) { lst.AddRange(used_units[i].GetNames()); } return lst.ToArray(); }
public override SymInfo[] GetNames(ExpressionVisitor ev, PascalABCCompiler.Parsers.KeywordKind keyword, bool called_in_base) { return new SymInfo[0]; }
public override SymInfo[] GetNamesInAllTopScopes(bool all_names, ExpressionVisitor ev, bool is_static) { return new SymInfo[0]; }
/// <summary> /// Получить реализацию expr /// </summary> public List<Position> GetRealization(expression expr, int line, int col, PascalABCCompiler.Parsers.KeywordKind keyword) { List<Position> poses = new List<Position>(); Position pos = new Position(); pos.line = -1; pos.column = -1; try { if (stv.cur_scope == null) return poses; SymScope ss = stv.FindScopeByLocation(line+1,col+1);//stv.cur_scope; if (ss == null) return poses; //if (!(expr is ident && string.Compare((expr as ident).name,ss.si.name) == 0)) bool on_proc = false; SetCurrentUsedAssemblies(); if (keyword == PascalABCCompiler.Parsers.KeywordKind.Function || keyword == PascalABCCompiler.Parsers.KeywordKind.Constructor || keyword == PascalABCCompiler.Parsers.KeywordKind.Destructor) { if (ss is ProcRealization) { if (expr is ident) { if ((expr as ident).name == (ss as ProcRealization).def_proc.si.name) on_proc = true; } else on_proc = true; } else if (ss is ProcScope) { if (expr is ident) { if ((expr as ident).name == (ss as ProcScope).si.name) on_proc = true; } else on_proc = true; } } //if (!((keyword == KeywordKind.kw_proc || keyword == KeywordKind.kw_constr || keyword == KeywordKind.kw_destr) && ss is ProcScope)) if (!on_proc) //if (keyword != KeywordKind.kw_proc && keyword != KeywordKind.kw_constr && keyword != KeywordKind.kw_destr) { ExpressionVisitor ev = new ExpressionVisitor(expr, ss, stv); ss = ev.GetScopeOfExpression(); } while (ss != null && ss is ProcScope && (ss as ProcScope).proc_realization != null && (ss as ProcScope).proc_realization.loc != null) { ProcRealization pr = (ss as ProcScope).proc_realization; pos.line = pr.loc.begin_line_num; pos.column = pr.loc.begin_column_num; pos.file_name = pr.loc.doc.file_name; poses.Add(pos); if (on_proc) break; //ss = (ss as ProcScope).nextProc; ss = null; } } catch (Exception e) { } RestoreCurrentUsedAssemblies(); return poses; }