Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Persistence/3.3/Core/EmptyStorableClassAttribute.cs @ 1555

Last change on this file since 1555 was 1555, checked in by epitzer, 15 years ago

More renaming and refactoring. (#548)

File size: 1.2 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Reflection;
4
5namespace HeuristicLab.Persistence.Core {
6
7 
8  [AttributeUsage(
9    AttributeTargets.Class,
10    AllowMultiple=false,
11    Inherited=false)]
12  public class EmptyStorableClassAttribute : Attribute {
13
14    private static readonly Dictionary<Type, bool> emptyTypeInfo = new Dictionary<Type, bool>();
15    public static bool IsEmptyStorable(Type type) {     
16      if (emptyTypeInfo.ContainsKey(type))
17        return emptyTypeInfo[type];
18      foreach (var attribute in type.GetCustomAttributes(false)) {
19        EmptyStorableClassAttribute empty = attribute as EmptyStorableClassAttribute;
20        if (empty != null) {
21          emptyTypeInfo.Add(type, true);
22          return true;
23        }
24      }
25      int nFields = 0;
26      foreach ( MemberInfo memberInfo in type.GetMembers(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) ) {
27        if (memberInfo.MemberType == MemberTypes.Field ||
28          memberInfo.MemberType == MemberTypes.Property)
29          nFields += 1;
30      }
31      if (nFields == 0) {
32        emptyTypeInfo.Add(type, true);
33        return true;
34      }
35      emptyTypeInfo.Add(type, false);
36      return false;
37    }
38  } 
39}
Note: See TracBrowser for help on using the repository browser.