[corlib] Defer TypeInfo instantiation logic in DefinedTypes. Fixes #19082
[mono.git] / mcs / class / corlib / System.Reflection / CustomAttributeData.cs
index ae9eee45fad76db1f412db322761496b4263fcbd..615bf7de8acf76df4ad102c95cd8f9ba1140755e 100644 (file)
@@ -139,6 +139,12 @@ namespace System.Reflection {
                        return MonoCustomAttrs.GetCustomAttributesData (target);
                }
 
+#if NET_4_5
+               public Type AttributeType {
+                       get { return ctorInfo.DeclaringType; }
+               }
+#endif
+
                public override string ToString ()
                {
                        StringBuilder sb = new StringBuilder ();
@@ -197,13 +203,18 @@ namespace System.Reflection {
 
                public override int GetHashCode ()
                {
-                       int ret = ctorInfo.GetHashCode () << 16;
+                       int ret = ctorInfo == null ? 13 : (ctorInfo.GetHashCode () << 16);
                        // argument order-dependent
-                       for (int i = 0; i < ctorArgs.Count; i++)
-                               ret += ret ^ 7 + ctorArgs [i].GetHashCode () << (i * 4);
+                       if (ctorArgs != null) {
+                               for (int i = 0; i < ctorArgs.Count; i++) {
+                                       ret += ret ^ 7 + ctorArgs [i].GetHashCode () << (i * 4);
+                               }
+                       }
                        // argument order-independent
-                       for (int i = 0; i < namedArgs.Count; i++)
-                               ret += (namedArgs [i].GetHashCode () << 5);
+                       if (namedArgs != null) {
+                               for (int i = 0; i < namedArgs.Count; i++)
+                                       ret += (namedArgs [i].GetHashCode () << 5);
+                       }
                        return ret;
                }
        }