コード例 #1
0
ファイル: RegionAnalyzer.cs プロジェクト: Aethon/odo
        private void UpdateItem(ObjectOrValueNode node, MetadataInfo info)
        {
            var newInstance = info.GetValue(node.Instance);

            if (newInstance == null)
            {
                node.Metadata[info] = null;
            }
            else
            {
                var newItem = RegisterItem(newInstance, node);
                node.Metadata[info] = newItem;
            }
        }
コード例 #2
0
ファイル: RegionAnalyzer.cs プロジェクト: Aethon/odo
 public void NoteMetadataRequirement(MetadataInfo info)
 {
     MetadataRequirements.Add(info);
 }
コード例 #3
0
ファイル: RegionAnalyzer.cs プロジェクト: Aethon/odo
        private void ApplyMetadataRequirement(MetadataInfo info)
        {
            HashSet<MetadataInfo> members;
            if (!_typeMetadataRequirements.TryGetValue(info.Type, out members))
            {
                members = new HashSet<MetadataInfo>();
                _typeMetadataRequirements[info.Type] = members;
            }
            if (!members.Contains(info))
            {
                members.Add(info);

                // while we are here, update any existing instances with this property
                foreach (
                    var i in
                        _items.Values.OfType<ObjectOrValueNode>().Where(
                            x =>
                            !x.Metadata.ContainsKey(info) && info.Type.IsAssignableFrom(x.Instance.GetType())).ToList())
                    UpdateItem(i, info);
            }
        }