aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting.Editors
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2020-10-26 17:34:11 +0200
committerAvi Levkovich <avi@twine-s.com>2020-10-26 17:34:11 +0200
commit730a3ec1157de96f74853e343b06725c647b3c13 (patch)
treeccd9dfd669b4d652fe8e9cdc8338ed7db905fa48 /Software/Visual_Studio/Scripting/Tango.Scripting.Editors
parent6a1dff8d05740d86d8fbcfc582818f802d62b13c (diff)
parent338d613fbf2d4e5302b66909ec7c703637829587 (diff)
downloadTango-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.cs34
-rw-r--r--Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs1
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(() =>