private void treeMib_AfterSelect(object sender, TreeViewEventArgs e) { listviewNodeDetails.Items.Clear(); if (e.Node != null) { MibTreeNode mtn = e.Node.Tag as MibTreeNode; if (mtn != null) { listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Abstract", mtn.NodeType.ToString() }, this.listviewgroupAbstract)); listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Module", (mtn.Entity.Module != null) ? mtn.Entity.Module.Name : "" }, this.listviewgroupElement)); listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Type", mtn.Entity.GetType().Name }, this.listviewgroupElement)); listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Name", mtn.Entity.Name }, this.listviewgroupElement)); listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Description", mtn.Entity.Description }, this.listviewgroupElement)); listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "OID", mtn.Entity.Value.ToString() }, this.listviewgroupElement)); listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Full OID", MibTypesResolver.ResolveOid(mtn.Entity).GetOidString() }, this.listviewgroupElement)); if (mtn.Entity is ObjectType) { listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Access", (mtn.Entity as ObjectType).Access.ToString() }, this.listviewgroupElement)); } ITypeReferrer tr = mtn.Entity as ITypeReferrer; if (tr != null) { ShowTypeDetails(listviewNodeDetails, this.listviewgroupBaseType, tr.BaseType); ShowTypeChain(listviewNodeDetails, tr.ReferredType); } } } }
private void ShowTypeChain(ListView lv, ITypeAssignment type) { ShowTypeDetails(lv, this.listviewgroupTypeChain, type); ITypeReferrer tr = type as ITypeReferrer; if ((tr != null) && (tr.ReferredType != null)) { lv.Items.Add(new ListViewItem(new string[] { " >>>", "" }, this.listviewgroupTypeChain)); ShowTypeChain(listviewNodeDetails, tr.ReferredType); } }
public static void ResolveTypes(IModule module) { foreach (IEntity entity in module.Entities) { ITypeReferrer typeReferringEntity = entity as ITypeReferrer; if (typeReferringEntity != null) { CheckTypeReferrer(module, typeReferringEntity); } } if (!_cachedModules.Contains(module)) { _cachedModules.Add(module); } }
private static void CheckTypeReferrer(IModule module, ITypeReferrer typeReferringEntity) { TypeAssignment unknownType = typeReferringEntity.ReferredType as TypeAssignment; if (unknownType != null) { typeReferringEntity.ReferredType = ResolveType(module, unknownType); if (typeReferringEntity.ReferredType is TypeAssignment) { Console.WriteLine(String.Format("Could not resolve type '{0}' declared in module '{1}'", (typeReferringEntity.ReferredType as TypeAssignment).Type, typeReferringEntity.ReferredType.Module.Name)); } } ITypeReferrer nextTypeReferringEntity = typeReferringEntity.ReferredType as ITypeReferrer; if (nextTypeReferringEntity != null) { CheckTypeReferrer(module, nextTypeReferringEntity); } }