[corlib] Update ValueTuple implementation
[mono.git] / mcs / class / referencesource / System.Activities.Presentation / System.Activities.Presentation / System / Activities / Presentation / FeatureManager.cs
1 //----------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation.  All rights reserved.
3 //----------------------------------------------------------------
4
5 namespace System.Activities.Presentation
6 {
7     using System.Collections.Generic;
8     using System.Activities.Presentation.Internal.PropertyEditing;
9     using System.Runtime;
10
11     class FeatureManager
12     {
13         EditingContext context;
14
15         HashSet<Type> initializedTypes;
16
17         public FeatureManager(EditingContext context)
18         {
19             this.context = context;
20             initializedTypes = new HashSet<Type>();
21         }
22
23         public void InitializeFeature(Type modelType)
24         {
25             Fx.Assert(modelType != null, "Why would anyone initialize a feature that is not associated with a type");
26
27             if (!initializedTypes.Contains(modelType))
28             {
29                 initializedTypes.Add(modelType);
30                 foreach (FeatureAttribute featureAttribute in ExtensibilityAccessor.GetAttributes<FeatureAttribute>(modelType))
31                 {
32                     if (typeof(Feature).IsAssignableFrom(featureAttribute.Type))
33                     {
34                         Feature feature = (Feature)Activator.CreateInstance(featureAttribute.Type);
35                         if (feature != null)
36                         {
37                             feature.Initialize(this.context, modelType);
38                         }
39                     }
40                 }
41                 if (modelType.IsGenericType)
42                 {
43                     InitializeFeature(modelType.GetGenericTypeDefinition());
44                 }
45             }
46         }
47     }
48 }