public SymInfo(SymInfo si) { this.name = si.name; this.addit_name = si.addit_name; this.description = si.description; this.kind = si.kind; this.IsUnitNamespace = si.IsUnitNamespace; this.acc_mod = si.acc_mod; this.has_doc = si.has_doc; this.not_include = si.not_include; }
private void InitModules() { try { string[] files = Directory.GetFiles(CodeCompletionController.comp.CompilerOptions.SearchDirectory,"*.pas"); standard_units = new SymInfo[files.Length]; int i=0; foreach (string s in files) { SymInfo si = new SymInfo(Path.GetFileNameWithoutExtension(s), SymbolKind.Namespace,null); si.IsUnitNamespace = true; standard_units[i++] = si; } } catch(Exception e) { //standard_units = new SymInfo[0]; } }
public InterfaceUnitScope(SymInfo si, SymScope topScope) : base(si, topScope) { UnitDocCache.AddDescribeToComplete(this); this.symbol_table = new Hashtable(StringComparer.CurrentCultureIgnoreCase); si.description = this.ToString(); }
public CompiledConstructorScope(SymInfo si, ConstructorInfo mi, CompiledScope declaringType) { this.si = si; this.mi = mi; //if (mi.ReturnType != typeof(void)) return_type = TypeTable.get_compiled_type(mi.DeclaringType); if (si.name == null) AssemblyDocCache.AddDescribeToComplete(this.si, mi); parameters = new List<ElementScope>(); foreach (ParameterInfo pi in mi.GetParameters()) parameters.Add(new CompiledParameterScope(new SymInfo(pi.Name, SymbolKind.Parameter, pi.Name), pi)); this.si.name = CodeCompletionController.CurrentParser.LanguageInformation.GetShortTypeName(this); this.si.description = this.ToString();//+"\n"+AssemblyDocCache.GetDocumentation(mi.DeclaringType.Assembly,"M:"+mi.DeclaringType.FullName+".#ctor"+GetParamNames()); this.topScope = declaringType; if (mi.IsPrivate) { this.si.acc_mod = access_modifer.private_modifer; this.acc_mod = access_modifer.private_modifer; } else if (mi.IsFamily || mi.IsFamilyOrAssembly) { this.acc_mod = access_modifer.protected_modifer; this.si.acc_mod = access_modifer.protected_modifer; } else if (mi.IsFamilyAndAssembly || mi.IsAssembly) { this.acc_mod = access_modifer.internal_modifer; this.si.acc_mod = access_modifer.internal_modifer; } }
public CompiledParameterScope(SymInfo si, ParameterInfo pi) { this.si = si; this.pi = pi; this.sc = TypeTable.get_compiled_type(pi.ParameterType); if (pi.ParameterType.IsByRef) this.param_kind = parametr_kind.var_parametr; else if (is_params(pi)) this.param_kind = parametr_kind.params_parametr; //MakeDescription(); }
public CompiledEventScope(SymInfo si, EventInfo ei, CompiledScope declaringType) { this.si = si; this.ei = ei; string[] args = declaringType.TemplateArguments; if (args != null) { generic_args = new List<string>(); generic_args.AddRange(args); } if (generic_args != null) { //TypeScope ts = declaringType.instances[ei.EventHandlerType.GenericParameterPosition]; this.sc = CompiledScope.get_type_instance(ei.EventHandlerType, declaringType.instances); } else this.sc = TypeTable.get_compiled_type(ei.EventHandlerType); if (si.name == null) AssemblyDocCache.AddDescribeToComplete(this.si, ei); this.si.name = ei.Name; this.si.description = this.ToString(); this.topScope = declaringType; MethodInfo acc_mi = ei.GetAddMethod(true); is_static = acc_mi.IsStatic; if (acc_mi.IsPrivate) { this.acc_mod = access_modifer.private_modifer; this.si.acc_mod = access_modifer.private_modifer; } else if (acc_mi.IsFamily || acc_mi.IsFamilyOrAssembly) { this.acc_mod = access_modifer.protected_modifer; this.si.acc_mod = access_modifer.protected_modifer; } else if (acc_mi.IsFamilyAndAssembly || acc_mi.IsAssembly) { this.acc_mod = access_modifer.internal_modifer; this.si.acc_mod = access_modifer.internal_modifer; } //this.si.describe += "\n"+AssemblyDocCache.GetDocumentation(ei.DeclaringType.Assembly,"E:"+ei.DeclaringType.FullName+"."+ei.Name); }
public override SymInfo[] GetNamesAsInObject() { List<SymInfo> syms = new List<SymInfo>(); if (!CodeCompletionController.CurrentParser.LanguageInformation.IncludeDotNetEntities) return syms.ToArray(); MemberInfo[] mis = ctn.GetMembers(BindingFlags.Public | BindingFlags.Instance); 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; 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; syms.Add(si2); } //syms.Add(new SymInfo(mi.Name,SymbolKind.Field,mi.Name)); break; } break; case MemberTypes.Property: { 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[] 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 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 void visit(var_def_statement _var_def_statement) { try { returned_scope = null; if (_var_def_statement.vars_type != null) _var_def_statement.vars_type.visit(this); if (_var_def_statement.vars_type == null && _var_def_statement.inital_value != null || _var_def_statement.inital_value is function_lambda_definition) { _var_def_statement.inital_value.visit(this); } // if (si == null) dn = compiled_type_node.get_type_node(PascalABCCompiler.NetHelper.NetHelper.FindType((_var_def_statement.vars_type as named_type_reference).names[0].name,unl)); if (returned_scope == null) return; if (returned_scope is ProcScope) { if (_var_def_statement.vars_type != null) returned_scope = new ProcType(returned_scope as ProcScope); else returned_scope = (returned_scope as ProcScope).return_type; } if (_var_def_statement.vars != null) foreach (ident s in _var_def_statement.vars.idents) { SymInfo si = new SymInfo(s.name, SymbolKind.Variable,s.name); if (cur_scope is TypeScope) si.kind = SymbolKind.Field; if (_var_def_statement.is_event) si.kind = SymbolKind.Event; ElementScope es = new ElementScope(si, returned_scope,cur_scope); if (add_doc_from_text && this.converter.controller.docs != null && this.converter.controller.docs.ContainsKey(_var_def_statement)) es.AddDocumentation(this.converter.controller.docs[_var_def_statement]); es.acc_mod = cur_access_mod; es.is_static = _var_def_statement.var_attr == definition_attribute.Static; es.si.acc_mod = cur_access_mod; es.loc = get_location(s); cur_scope.AddName(s.name,es); es.declaringUnit = cur_scope; } } catch(Exception e) { } }
public static CompiledScope get_compiled_type(SymInfo si, Type t) { object o = ht[t]; if (o != null) return o as CompiledScope; CompiledScope sc = new CompiledScope(si,t); ht[t] = sc; return sc; }
/// <summary> /// Выдает все типы (используется после new) /// </summary> public SymInfo[] GetTypes(expression expr, int line, int col, out SymInfo out_si) { out_si = null; if (stv.cur_scope == null) return null; SymScope si = stv.FindScopeByLocation(line + 1, col + 1);//stv.cur_scope; SymInfo[] elems = null; if (si == null) return null; elems = si.GetNamesInAllTopScopes(true, new ExpressionVisitor(si, stv), false); if (expr != null) { ExpressionVisitor ev = new ExpressionVisitor(expr, si, stv); si = ev.GetScopeOfExpression(); if (si is TypeScope) si = new ElementScope(si); } List<SymInfo> result_names = new List<SymInfo>(); if (elems == null) return null; for (int i = 0; i < elems.Length; i++) { if (!elems[i].name.StartsWith("$") && (elems[i].kind == SymbolKind.Class || elems[i].kind == SymbolKind.Namespace) && elems[i].kind != SymbolKind.Interface) { if (expr != null && si != null && si is ElementScope && string.Compare(elems[i].name, (si as ElementScope).sc.si.name, true) == 0) { out_si = elems[i]; //out_si = new SymInfo(elems[i].name,elems[i].kind,elems[i].describe); string s = CodeCompletionController.CurrentParser.LanguageInformation.GetSimpleDescriptionWithoutNamespace((si as ElementScope).sc as PascalABCCompiler.Parsers.ITypeScope); if (s != out_si.name) out_si.addit_name = s; // if (((si as ElementScope).sc as TypeScope).TemplateArguments != null) // { // SymInfo tmp_si = new SymInfo(null,elems[i].kind,elems[i].describe); // StringBuilder sb = new StringBuilder(); // string[] template_args = ((si as ElementScope).sc as TypeScope).TemplateArguments; // sb.Append(elems[i].name); // sb.Append('<'); // for (int j=0; j<template_args.Length; j++) // { // sb.Append(template_args[j]); // if (j<template_args.Length-1) // sb.Append(','); // } // sb.Append('>'); // elems[i] = tmp_si; // out_si = tmp_si; // } } result_names.Add(elems[i]); } } if (out_si == null && expr != null && si != null && si is ElementScope) { out_si = (si as ElementScope).sc.si; if (!out_si.name.StartsWith("$") && out_si.kind != SymbolKind.Interface) { out_si.name = (si as ElementScope).sc.GetFullName(); result_names.Add(out_si); } else { out_si = null; } } return result_names.ToArray(); }
public SymInfo[] GetOverridableMethods(int line, int col) { if (stv.cur_scope == null) return null; SymScope ss = stv.FindScopeByLocation(line+1,col+1);//stv.cur_scope; if (ss == null) return null; List<SymInfo> meths = new List<SymInfo>(); SetCurrentUsedAssemblies(); if (ss is TypeScope && ((ss as TypeScope).kind == SymbolKind.Class || (ss as TypeScope).kind == SymbolKind.Struct)) { TypeScope ts = ss as TypeScope; if (ts.baseScope != null) { List<ProcScope> procs = ts.baseScope.GetOverridableMethods(); for (int i=0; i<procs.Count; i++) { SymScope elem = ts.FindNameOnlyInThisType(procs[i].Name); if (elem == null || !(elem is ProcScope)) { int pos = 0; string full_name = CodeCompletionController.CurrentParser.LanguageInformation.ConstructOverridedMethodHeader(procs[i],out pos); SymInfo si = new SymInfo(full_name.Substring(pos),procs[i].si.kind,full_name); si.acc_mod = procs[i].si.acc_mod; meths.Add(si); } } } } RestoreCurrentUsedAssemblies(); return meths.ToArray(); }
public static void AddDescribeToComplete(SymInfo si, ConstructorInfo ci) { elem_cache.Add(ci); doc_wait_list[ci] = si; }
public static void AddDescribeToComplete(SymInfo si, PropertyInfo pi) { elem_cache.Add(pi); doc_wait_list[pi] = si; }
public ImplementationUnitScope(SymInfo si, SymScope topScope) : base(si, topScope) { }
public override List<ProcScope> GetAbstractMethods() { List<ProcScope> syms = new List<ProcScope>(); MemberInfo[] mis = ctn.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.FlattenHierarchy); if (ctn.IsInterface) { List<MemberInfo> mems = new List<MemberInfo>(); mems.AddRange(mis); Type[] tt = ctn.GetInterfaces(); foreach (Type t in tt) 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).IsStatic) { SymInfo si2 = new SymInfo(null, SymbolKind.Method, null); CompiledMethodScope member = new CompiledMethodScope(si2, mi as MethodInfo, this); si2 = member.si; if ((mi as MethodInfo).IsAbstract || (ctn.IsInterface && (mi as MethodInfo).DeclaringType == ctn)) { if (si2.acc_mod == access_modifer.protected_modifer) { syms.Add(member); } else if (si2.acc_mod != access_modifer.private_modifer && si2.acc_mod != access_modifer.internal_modifer) syms.Add(member); } } break; } return syms; }
public ElementScope(SymInfo si, SymScope sc, SymScope topScope) { this.si = si; this.sc = sc; this.topScope = topScope; MakeDescription(); //UnitDocCache.AddDescribeToComplete(this); //if (sc is ProcScope) si.kind = SymbolKind.Delegate; //si.describe = si.name + ": " + sc.ToString(); }
public SymInfo[] GetStaticNames() { 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) { 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.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.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.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.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.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 ElementScope(SymInfo si, SymScope sc, object cnst_val, SymScope topScope) { this.si = si; this.sc = sc; this.topScope = topScope; this.cnst_val = cnst_val; MakeDescription(); //UnitDocCache.AddDescribeToComplete(this); }
public override SymInfo[] GetNames() { List<SymInfo> syms = new List<SymInfo>(); if (!CodeCompletionController.CurrentParser.LanguageInformation.IncludeDotNetEntities) return syms.ToArray(); MemberInfo[] mis = ctn.GetMembers(BindingFlags.Public | 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 (si.kind != SymbolKind.Type) { 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; 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; 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) { 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: { MethodInfo acc_mi = (mi as EventInfo).GetAddMethod(true); if (acc_mi.IsPublic && !acc_mi.IsStatic) { 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) { 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) { 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); } } break; case MemberTypes.Property: { PropertyInfo pi = mi as PropertyInfo; MethodInfo acc_mi = pi.GetGetMethod(true); if (acc_mi != null && acc_mi.IsStatic) { SymInfo si2 = new SymInfo(null, SymbolKind.Property, null); si2 = new CompiledPropertyScope(si2, mi as PropertyInfo, this).si; syms.Add(si2); } } break; case MemberTypes.Event: { MethodInfo acc_mi = (mi as EventInfo).GetAddMethod(true); if (acc_mi.IsPublic && acc_mi.IsStatic) { 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 SymScope(SymInfo si, SymScope topScope) { this.si = si; //si.describe = "unit "+si.name; si.IsUnitNamespace = true; this.topScope = topScope; //this.ht = new Hashtable(CaseInsensitiveHashCodeProvider.Default,CaseInsensitiveComparer.Default); this.used_units = new List<SymScope>(); members = new List<SymScope>(); }
public CompiledFieldScope(SymInfo si, FieldInfo fi, CompiledScope declaringType, bool is_global) { this.si = si; this.fi = fi; string[] args = declaringType.TemplateArguments; if (args != null) { generic_args = new List<string>(); generic_args.AddRange(args); } if (generic_args != null) { //TypeScope ts = declaringType.instances[fi.FieldType.GenericParameterPosition]; this.sc = CompiledScope.get_type_instance(fi.FieldType, declaringType.instances); } else this.sc = TypeTable.get_compiled_type(fi.FieldType); if (fi.IsLiteral) this.cnst_val = fi.GetRawConstantValue(); if (si.name == null) AssemblyDocCache.AddDescribeToComplete(this.si, fi); this.si.name = fi.Name; this.is_global = is_global; this.si.description = this.ToString(); //this.si.describe += "\n"+AssemblyDocCache.GetDocumentation(fi.DeclaringType.Assembly,"F:"+fi.DeclaringType.FullName+"."+fi.Name); this.topScope = declaringType; if (fi.IsPrivate) { this.acc_mod = access_modifer.private_modifer; this.si.acc_mod = access_modifer.private_modifer; } else if (fi.IsFamily || fi.IsFamilyOrAssembly) { this.acc_mod = access_modifer.protected_modifer; this.si.acc_mod = access_modifer.protected_modifer; } else if (fi.IsFamilyAndAssembly || fi.IsAssembly) { this.acc_mod = access_modifer.internal_modifer; this.si.acc_mod = access_modifer.internal_modifer; } }
public TypeSynonim(SymInfo si, SymScope actType) : base(SymbolKind.Type, null, null) { this.actType = actType as TypeScope; this.si = si; if (actType.si != null && actType.si.description != null) this.si.description = CodeCompletionController.CurrentParser.LanguageInformation.GetDescription(this); //this.si.describe = "type "+this.si.name + " = "+actType.si.name; }
public CompiledPropertyScope(SymInfo si, PropertyInfo pi, CompiledScope declaringType) { this.si = si; this.pi = pi; string[] args = declaringType.TemplateArguments; if (args != null) { generic_args = new List<string>(); generic_args.AddRange(args); } if (generic_args != null || declaringType.instances != null ) { //TypeScope ts = declaringType.instances[pi.PropertyType.GenericParameterPosition]; this.sc = CompiledScope.get_type_instance(pi.PropertyType, declaringType.instances); } else this.sc = TypeTable.get_compiled_type(pi.PropertyType); if (si.name == null) AssemblyDocCache.AddDescribeToComplete(this.si, pi); this.si.name = pi.Name; this.topScope = declaringType; //this.si.describe += "\n"+AssemblyDocCache.GetDocumentation(pi.DeclaringType.Assembly,"P:"+pi.DeclaringType.FullName+"."+pi.Name); MethodInfo acc_mi = PascalABCCompiler.NetHelper.NetHelper.GetAnyAccessor(pi); if (acc_mi != null && acc_mi == pi.GetGetMethod(true)) { ParameterInfo[] prms = acc_mi.GetParameters(); if (prms.Length > 0) { indexers = new List<TypeScope>(); foreach (ParameterInfo p in prms) { indexers.Add(TypeTable.get_compiled_type(p.ParameterType)); } Type ret_type = acc_mi.ReturnType; elementType = TypeTable.get_compiled_type(ret_type); } } if (acc_mi != null) if (acc_mi.IsPrivate) { this.acc_mod = access_modifer.private_modifer; this.si.acc_mod = access_modifer.private_modifer; } else if (acc_mi.IsFamily || acc_mi.IsFamilyOrAssembly) { this.acc_mod = access_modifer.protected_modifer; this.si.acc_mod = access_modifer.protected_modifer; } else if (acc_mi.IsFamilyAndAssembly || acc_mi.IsAssembly) { this.acc_mod = access_modifer.internal_modifer; this.si.acc_mod = access_modifer.internal_modifer; } this.si.description = this.ToString(); }
public RecordScope() { //ht = new Hashtable(); baseScope = TypeTable.get_compiled_type(new SymInfo(typeof(ValueType).Name, SymbolKind.Struct, typeof(ValueType).FullName), typeof(ValueType)); si = new SymInfo("record", SymbolKind.Struct, "record"); this.members = new List<SymScope>(); }
public CompiledMethodScope(SymInfo si, MethodInfo mi, CompiledScope declaringType, bool is_global) { this.si = si; this.mi = mi; string[] args = declaringType.TemplateArguments; if (args != null) { generic_args = new List<string>(); generic_args.AddRange(args); } if (mi.ReturnType != typeof(void)) return_type = TypeTable.get_compiled_type(mi.ReturnType); parameters = new List<ElementScope>(); int i = 0; is_extension = PascalABCCompiler.NetHelper.NetHelper.IsExtensionMethod(mi); foreach (ParameterInfo pi in mi.GetParameters()) { parameters.Add(new CompiledParameterScope(new SymInfo(pi.Name, SymbolKind.Parameter, pi.Name), pi)); } this.is_global = is_global; if (si.name == null) AssemblyDocCache.AddDescribeToComplete(this.si, mi); this.si.name = CodeCompletionController.CurrentParser.LanguageInformation.GetShortTypeName(this); this.si.description = this.ToString(); //this.si.describe += "\n"+AssemblyDocCache.GetDocumentation(mi.DeclaringType.Assembly,"M:"+mi.DeclaringType.FullName+"."+mi.Name+GetParamNames()); this.topScope = declaringType; if (mi.IsPrivate) { this.si.acc_mod = access_modifer.private_modifer; this.acc_mod = access_modifer.private_modifer; } else if (mi.IsFamily || mi.IsFamilyOrAssembly) { this.acc_mod = access_modifer.protected_modifer; this.si.acc_mod = access_modifer.protected_modifer; } else if (mi.IsFamilyAndAssembly || mi.IsAssembly) { this.acc_mod = access_modifer.internal_modifer; this.si.acc_mod = access_modifer.internal_modifer; } }
public TypeScope(SymbolKind kind, SymScope topScope, SymScope baseScope) { this.kind = kind; this.baseScope = baseScope as TypeScope; this.topScope = topScope; if (baseScope == null) { if (CodeCompletionController.CurrentParser.LanguageInformation.IncludeDotNetEntities) switch (kind) { case SymbolKind.Struct: this.baseScope = TypeTable.get_compiled_type(new SymInfo(typeof(ValueType).Name, SymbolKind.Struct, typeof(ValueType).FullName), typeof(ValueType)); break; case SymbolKind.Interface: case SymbolKind.Class: this.baseScope = TypeTable.get_compiled_type(new SymInfo(typeof(object).Name, SymbolKind.Class, typeof(object).FullName), typeof(object)); break; case SymbolKind.Enum: this.baseScope = TypeTable.get_compiled_type(new SymInfo(typeof(Enum).Name, SymbolKind.Enum, typeof(Enum).FullName), typeof(Enum)); break; } } //this.ht = new Hashtable(CaseInsensitiveHashCodeProvider.Default,CaseInsensitiveComparer.Default); this.members = new List<SymScope>(); this.indexers = new List<TypeScope>(); this.instances = new List<TypeScope>(); //this.generic_params = new List<string>(); si = new SymInfo("type", kind, "type"); //UnitDocCache.AddDescribeToComplete(this); switch (kind) { case SymbolKind.Struct: si.description = CodeCompletionController.CurrentParser.LanguageInformation.GetKeyword(PascalABCCompiler.Parsers.SymbolKind.Struct); break; case SymbolKind.Class: si.description = CodeCompletionController.CurrentParser.LanguageInformation.GetKeyword(PascalABCCompiler.Parsers.SymbolKind.Class); break; case SymbolKind.Interface: si.description = CodeCompletionController.CurrentParser.LanguageInformation.GetKeyword(PascalABCCompiler.Parsers.SymbolKind.Interface); break; case SymbolKind.Enum: si.description = CodeCompletionController.CurrentParser.LanguageInformation.GetKeyword(PascalABCCompiler.Parsers.SymbolKind.Enum); break; } }
public UnknownScope(SymInfo si) { this.si = si; this.name = si.name; }
public CompiledScope(SymInfo si, Type ctn) { this.ctn = ctn; this.si = si; this.instances = new List<TypeScope>(); if (ctn.BaseType != null) baseScope = TypeTable.get_compiled_type(ctn.BaseType); Type t = ctn.GetElementType(); //get_default_property(); if (t != null) { elementType = TypeTable.get_compiled_type(t); is_def_prop_searched = true; } if (si.name == null) AssemblyDocCache.AddDescribeToComplete(this.si, ctn); this.si.name = CodeCompletionController.CurrentParser.LanguageInformation.GetShortTypeName(this); this.si.kind = get_kind(); this.si.description = GetDescription(); if (ctn.IsGenericType && !ctn.IsGenericTypeDefinition) { this.original_type = TypeTable.get_compiled_type(ctn.GetGenericTypeDefinition()); } if (ctn.GetInterfaces().Length > 0) { this.implemented_interfaces = new List<TypeScope>(); foreach (Type intf in ctn.GetInterfaces()) { this.implemented_interfaces.Add(TypeTable.get_compiled_type(intf)); } } }
public static CompiledScope get_compiled_type(SymInfo si, Type t) { CompiledScope sc = null; if (type_cache.TryGetValue(t, out sc)) return sc; if (si == null) si = new SymInfo(t.Name, SymbolKind.Type, t.FullName); sc = new CompiledScope(si,t); type_cache[t] = sc; return sc; }
public virtual void Update(PascalABCCompiler.Parsers.SymInfo si) { }