diff options
| author | Avi Levkovich <avi@twine-s.com> | 2020-10-26 17:34:11 +0200 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2020-10-26 17:34:11 +0200 |
| commit | 730a3ec1157de96f74853e343b06725c647b3c13 (patch) | |
| tree | ccd9dfd669b4d652fe8e9cdc8338ed7db905fa48 /Software/Visual_Studio/Scripting/Tango.Scripting.Editors | |
| parent | 6a1dff8d05740d86d8fbcfc582818f802d62b13c (diff) | |
| parent | 338d613fbf2d4e5302b66909ec7c703637829587 (diff) | |
| download | Tango-730a3ec1157de96f74853e343b06725c647b3c13.tar.gz Tango-730a3ec1157de96f74853e343b06725c647b3c13.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.Editors')
| -rw-r--r-- | Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Intellisense/KnownType.cs | 34 | ||||
| -rw-r--r-- | Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs | 1 |
2 files changed, 33 insertions, 2 deletions
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Intellisense/KnownType.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Intellisense/KnownType.cs index c2e7ac422..8010dc689 100644 --- a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Intellisense/KnownType.cs +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Intellisense/KnownType.cs @@ -1,4 +1,5 @@ -using System; +using Newtonsoft.Json; +using System; using System.Collections; using System.Collections.Generic; using System.Drawing; @@ -43,6 +44,13 @@ namespace Tango.Scripting.Editors.Intellisense } public List<KnownTypeField> Fields { get; set; } + public static List<Assembly> ExtensionMethodsAssemblies { get; set; } + + static KnownType() + { + ExtensionMethodsAssemblies = new List<Assembly>(); + } + public KnownType(Type type) { Summary = "Loading documentation..."; @@ -124,9 +132,31 @@ namespace Tango.Scripting.Editors.Intellisense { var methods = Type.GetRuntimeMethods().Where(x => x.IsPublic && !x.IsSpecialName).ToList(); + if (Type.IsInterface) + { + foreach (var inter in Type.GetInterfaces()) + { + methods.AddRange(inter.GetRuntimeMethods().Where(x => x.IsPublic && !x.IsSpecialName).ToList()); + } + methods = methods.Distinct().ToList(); + + if (!methods.Exists(x => x.Name == "ToString")) + { + methods.Add(typeof(Object).GetMethod("ToString")); + } + } + //TODO: Separate extension methods! methods.AddRange(Type.GetExtensionMethods(Type.Assembly).ToList()); + if (Type.Namespace.StartsWith("Tango")) + { + foreach (var asm in ExtensionMethodsAssemblies.Where(x => x != Type.Assembly)) + { + methods.AddRange(Type.GetExtensionMethods(asm).ToList()); + } + } + if (typeof(IEnumerable).IsAssignableFrom(Type)) { var linqMethods = typeof(System.Linq.Enumerable).GetMethods(BindingFlags.Static | BindingFlags.Public).ToList(); @@ -143,7 +173,7 @@ namespace Tango.Scripting.Editors.Intellisense m.Name = method.Name; m.ReturnType = method.ReturnType; m.ReturnTypeFriendlyName = method.ReturnType.GetFriendlyName(); - m.IsStatic = method.IsStatic; + m.IsStatic = method.IsStatic && !method.IsDefined(typeof(System.Runtime.CompilerServices.ExtensionAttribute), false); if (method.IsGenericMethod) { diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs index 9ff78912f..e65ff671d 100644 --- a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs @@ -1808,6 +1808,7 @@ namespace Tango.Scripting.Editors _isLoadingTypes = true; var assemblies = ReferenceAssemblies.ToList(); + KnownType.ExtensionMethodsAssemblies = assemblies.ToList(); var usings = _current_usings.ToList(); Thread t = new Thread(() => |
