浏览代码

Add wrapper for `Assembly.GetTypes()` which won't throw an exception

/main
Peter Bay Bastian 7 年前
当前提交
b3445484
共有 6 个文件被更改,包括 24 次插入7 次删除
  1. 5
      com.unity.shadergraph/Editor/Data/Nodes/MasterNode.cs
  2. 2
      com.unity.shadergraph/Editor/Data/Util/GraphUtil.cs
  3. 3
      com.unity.shadergraph/Editor/Drawing/Blackboard/BlackboardField.cs
  4. 5
      com.unity.shadergraph/Editor/Drawing/Inspector/MasterPreviewView.cs
  5. 3
      com.unity.shadergraph/Editor/Drawing/SearchWindowProvider.cs
  6. 13
      com.unity.shadergraph/Editor/Util/UIUtilities.cs

5
com.unity.shadergraph/Editor/Data/Nodes/MasterNode.cs


using System.Collections.Generic;
using System.Linq;
using UnityEditor.Graphing;
using UnityEditor.Graphing.Util;
using UnityEngine;
namespace UnityEditor.ShaderGraph

{
get { return typeof(T); }
}
public IEnumerable<T> subShaders
{
get { return m_SubShaders; }

base.UpdateNodeAfterDeserialization();
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (var type in assembly.GetTypes())
foreach (var type in assembly.GetTypesOrNothing())
{
var isValid = !type.IsAbstract && type.IsPublic && !type.IsGenericType && type.IsClass && typeof(T).IsAssignableFrom(type);
if (isValid && !subShaders.Any(s => s.GetType() == type))

2
com.unity.shadergraph/Editor/Data/Util/GraphUtil.cs


s_LegacyTypeRemapping = new Dictionary<SerializationHelper.TypeSerializationInfo, SerializationHelper.TypeSerializationInfo>();
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (var type in assembly.GetTypes())
foreach (var type in assembly.GetTypesOrNothing())
{
if (type.IsAbstract)
continue;

3
com.unity.shadergraph/Editor/Drawing/Blackboard/BlackboardField.cs


using System.Linq;
using System.Reflection;
using UnityEditor.Experimental.UIElements.GraphView;
using UnityEditor.Graphing.Util;
using UnityEngine;
using UnityEngine.Experimental.UIElements;

public BlackboardField()
: this(null, "", "") { }
static Type s_ContextualMenuManipulator = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()).FirstOrDefault(t => t.FullName == "UnityEngine.Experimental.UIElements.ContextualMenuManipulator");
static Type s_ContextualMenuManipulator = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypesOrNothing()).FirstOrDefault(t => t.FullName == "UnityEngine.Experimental.UIElements.ContextualMenuManipulator");
public BlackboardField(Texture icon, string text, string typeText)
{

5
com.unity.shadergraph/Editor/Drawing/Inspector/MasterPreviewView.cs


using UnityEditor.Experimental.UIElements;
using UnityEngine.Experimental.UIElements;
using UnityEditor.Graphing;
using UnityEditor.Graphing.Util;
using UnityEngine.Experimental.UIElements.StyleSheets;
using Object = UnityEngine.Object;

List<string> m_DoNotShowPrimitives = new List<string>( new string[] {PrimitiveType.Plane.ToString()});
static Type s_ContextualMenuManipulator = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()).FirstOrDefault(t => t.FullName == "UnityEngine.Experimental.UIElements.ContextualMenuManipulator");
static Type s_ObjectSelector = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()).FirstOrDefault(t => t.FullName == "UnityEditor.ObjectSelector");
static Type s_ContextualMenuManipulator = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypesOrNothing()).FirstOrDefault(t => t.FullName == "UnityEngine.Experimental.UIElements.ContextualMenuManipulator");
static Type s_ObjectSelector = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypesOrNothing()).FirstOrDefault(t => t.FullName == "UnityEditor.ObjectSelector");
public MasterPreviewView(string assetName, PreviewManager previewManager, AbstractMaterialGraph graph)
{

3
com.unity.shadergraph/Editor/Drawing/SearchWindowProvider.cs


using UnityEditor.Experimental.UIElements;
using UnityEditor.Experimental.UIElements.GraphView;
using UnityEditor.Graphing;
using UnityEditor.Graphing.Util;
using UnityEngine;
using UnityEngine.Experimental.UIElements;

var nodeEntries = new List<NodeEntry>();
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (var type in assembly.GetTypes())
foreach (var type in assembly.GetTypesOrNothing())
{
if (type.IsClass && !type.IsAbstract && (type.IsSubclassOf(typeof(AbstractMaterialNode))) && type != typeof(PropertyNode))
{

13
com.unity.shadergraph/Editor/Util/UIUtilities.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace UnityEditor.Graphing.Util
{

public static IEnumerable<T> ToEnumerable<T>(this T item)
{
yield return item;
}
public static IEnumerable<Type> GetTypesOrNothing(this Assembly assembly)
{
try
{
return assembly.GetTypes();
}
catch
{
return Enumerable.Empty<Type>();
}
}
}
}
正在加载...
取消
保存