public ASContext() { features = new ContextFeatures(); completionCache = new CompletionCache(this, null); cacheRefreshTimer = new Timer(); cacheRefreshTimer.Interval = 1500; // delay initial refresh cacheRefreshTimer.Tick += new EventHandler(cacheRefreshTimer_Tick); }
/// <summary> /// Return the elements (package, types, etc) visible from the current file /// </summary> /// <param name="typesOnly">Return only packages & types</param> /// <returns></returns> public override MemberList GetVisibleExternalElements(bool typesOnly) { MemberList visibleElements = new MemberList(); if (!IsFileValid) return visibleElements; // top-level elements if (!typesOnly && topLevel != null) { if (topLevel.OutOfDate) InitTopLevelElements(); visibleElements.Add(topLevel.Members); } if (completionCache.IsDirty) { MemberList elements = new MemberList(); // root types & packages FileModel baseElements = ResolvePackage(null, false); if (baseElements != null) { elements.Add(baseElements.Imports); elements.Add(baseElements.Members); } elements.Add(new MemberModel(features.voidKey, features.voidKey, FlagType.Class | FlagType.Intrinsic, 0)); bool qualify = Settings.CompletionShowQualifiedTypes && settings.GenerateImports; // other classes in same package if (features.hasPackages && cFile.Package != "") { FileModel packageElements = ResolvePackage(cFile.Package, false); if (packageElements != null) { foreach (MemberModel member in packageElements.Imports) { if (member.Flags != FlagType.Package) { if (qualify) member.Name = member.Type; elements.Add(member); } } foreach (MemberModel member in packageElements.Members) { string pkg = member.InFile.Package; if (qualify && pkg != "") member.Name = pkg + "." + member.Name; elements.Add(member); } } } // other classes in same file if (cFile.PrivateSectionIndex > 0) { if (inPrivateSection && cFile.Classes.Count > 1) { ClassModel mainClass = cFile.GetPublicClass(); if (!mainClass.IsVoid()) { MemberModel toRemove = elements.Search(mainClass.Name, 0, 0); if (toRemove != null && toRemove.Type == mainClass.QualifiedName) elements.Remove(toRemove); } } MemberModel member; foreach (ClassModel aClass in cFile.Classes) { if (features.hasMultipleDefs || aClass.Access == Visibility.Private) { member = aClass.ToMemberModel(); elements.Add(member); } } } // imports elements.Add(ResolveImports(CurrentModel)); // in cache elements.Sort(); completionCache = new CompletionCache(this, elements); // known classes colorization if (!CommonSettings.DisableKnownTypesColoring && !settings.LazyClasspathExploration && CurSciControl != null) { try { CurSciControl.KeyWords(1, completionCache.Keywords); // additional-keywords index = 1 CurSciControl.Colourise(0, -1); // re-colorize the editor } catch (AccessViolationException){} // catch memory errors } } visibleElements.Merge(completionCache.Elements); return visibleElements; }
/// <summary> /// Return the visible elements (types, package-level declarations) visible from the current file /// </summary> /// <returns></returns> public virtual MemberList GetVisibleExternalElements() { // to be implemented completionCache = new CompletionCache(this, null); return new MemberList(); }
public override MemberList GetVisibleExternalElements(bool typesOnly) { MemberList visibleElements = new MemberList(); if (!IsFileValid) return visibleElements; // top-level elements if (!typesOnly && topLevel != null) { if (topLevel.OutOfDate) InitTopLevelElements(); visibleElements.Add(topLevel.Members); } if (completionCache.IsDirty || !typesOnly) { MemberList elements = new MemberList(); // root types & packages FileModel baseElements = ResolvePackage(null, false); if (baseElements != null) { elements.Add(baseElements.Imports); foreach(MemberModel decl in baseElements.Members) if ((decl.Flags & (FlagType.Class | FlagType.Enum | FlagType.TypeDef | FlagType.Abstract)) > 0) elements.Add(decl); } elements.Add(new MemberModel(features.voidKey, features.voidKey, FlagType.Class | FlagType.Intrinsic, 0)); bool qualify = Settings.CompletionShowQualifiedTypes && settings.GenerateImports; // other classes in same package if (features.hasPackages && cFile.Package != "") { int pLen = cFile.Package.Length; FileModel packageElements = ResolvePackage(cFile.Package, false); if (packageElements != null) { foreach (MemberModel member in packageElements.Imports) { if (member.Flags != FlagType.Package && member.Type.LastIndexOf('.') == pLen) { if (qualify) member.Name = member.Type; elements.Add(member); } } foreach (MemberModel member in packageElements.Members) { string pkg = member.InFile.Package; if (qualify && pkg != "") member.Name = pkg + "." + member.Name; elements.Add(member); } } } // other types in same file if (cFile.Classes.Count > 1) { ClassModel mainClass = cFile.GetPublicClass(); foreach (ClassModel aClass in cFile.Classes) { if (mainClass == aClass) continue; elements.Add(aClass.ToMemberModel()); if (!typesOnly && aClass.IsEnum()) elements.Add(aClass.Members); } } // imports MemberList imports = ResolveImports(CurrentModel); elements.Add(imports); if (!typesOnly) foreach (MemberModel import in imports) { if (import is ClassModel) { ClassModel aClass = import as ClassModel; if (aClass.IsEnum()) elements.Add(aClass.Members); } } elements.Sort(); // in cache if (typesOnly) { completionCache = new CompletionCache(this, elements); // known classes colorization if (!CommonSettings.DisableKnownTypesColoring && !settings.LazyClasspathExploration && CurSciControl != null) { try { CurSciControl.KeyWords(1, completionCache.Keywords); // additional-keywords index = 1 CurSciControl.Colourise(0, -1); // re-colorize the editor } catch (AccessViolationException) { } // catch memory errors } } visibleElements.Merge(elements); } else visibleElements.Merge(completionCache.Elements); return visibleElements; }