/// <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;
 }
Exemple #2
0
        //		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();
        }
Exemple #3
0
 public override SymInfo[] GetNamesAsInObject(ExpressionVisitor ev)
 {
     return new SymInfo[0];
 }
Exemple #4
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();
 }
Exemple #5
0
 public virtual SymInfo[] GetNamesAsInBaseClass(ExpressionVisitor ev, bool is_static)
 {
     return new SymInfo[0];
 }
Exemple #6
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();
        }
Exemple #7
0
        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;
        }
Exemple #8
0
 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();
 }
Exemple #9
0
 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;
 }
Exemple #10
0
 public override SymInfo[] GetNamesAsInObject(ExpressionVisitor ev)
 {
     return def_proc.GetNamesAsInObject(ev);
 }
Exemple #11
0
        //		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;
 }
Exemple #15
0
 public override SymInfo[] GetNamesAsInObject(ExpressionVisitor ev)
 {
     //SortedDictionary<string,SymInfo> dict = new SortedDictionary<string,SymInfo>();
     return new SymInfo[0];
 }
Exemple #16
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];
 }
Exemple #17
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();
        }
Exemple #18
0
 public override SymInfo[] GetNamesAsInBaseClass(ExpressionVisitor ev, bool is_static)
 {
     if (this.baseScope != null)
         return baseScope.GetNamesAsInBaseClass(ev, is_static);
     return null;
 }
Exemple #19
0
 //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();
 }
Exemple #20
0
 public override SymInfo[] GetNamesAsInBaseClass(ExpressionVisitor ev, bool is_static)
 {
     return actType.GetNamesAsInBaseClass(ev, is_static);
 }
Exemple #21
0
 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();
 }
Exemple #22
0
        //		public override SymInfo[] GetNames(ExpressionVisitor ev)
        //		{
        //			return actType.GetNamesAsInObject(ev);
        //		}

        public override SymInfo[] GetNamesAsInObject(ExpressionVisitor ev)
        {
            return actType.GetNamesAsInObject(ev);
        }
Exemple #23
0
 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();
 }
Exemple #24
0
 public override SymInfo[] GetNamesInAllTopScopes(bool all_names, ExpressionVisitor ev, bool is_static)
 {
     return actType.GetNamesInAllTopScopes(all_names, ev, is_static);
 }
Exemple #25
0
 //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();
 }
Exemple #26
0
 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];
 }
Exemple #27
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();
 }
Exemple #28
0
 public override SymInfo[] GetNames(ExpressionVisitor ev, PascalABCCompiler.Parsers.KeywordKind keyword, bool called_in_base)
 {
     return new SymInfo[0];
 }
Exemple #29
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; 
 }