private void TestParseStructureDeclarationInternal(Func <string, NativeXStructureDeclaration> parser) { Action <NativeXStructureDeclaration> vd1 = d => { Assert.AreEqual("List", d.Name); Assert.IsNull(d.Linking); Assert.IsNull(d.Members); }; Action <NativeXStructureDeclaration> vd2 = d => { Assert.AreEqual("List", d.Name); Assert.IsNull(d.Linking); Assert.AreEqual(2, d.Members.Count); Assert.AreEqual("int", ((NativeXReferenceType)d.Members[0].Type).ReferencedName); Assert.AreEqual("count", d.Members[0].Name); Assert.AreEqual("int", ((NativeXReferenceType)((NativeXPointerType)d.Members[1].Type).ElementType).ReferencedName); Assert.AreEqual("items", d.Members[1].Name); }; Action <NativeXStructureDeclaration> vd3 = d => { Assert.AreEqual("List", d.Name); Assert.AreEqual("Utility", d.Linking.LinkingAssembly); Assert.AreEqual("List", d.Linking.LinkingSymbol); Assert.AreEqual(2, d.Members.Count); Assert.AreEqual("int", ((NativeXReferenceType)d.Members[0].Type).ReferencedName); Assert.AreEqual("count", d.Members[0].Name); Assert.AreEqual("int", ((NativeXReferenceType)((NativeXPointerType)d.Members[1].Type).ElementType).ReferencedName); Assert.AreEqual("items", d.Members[1].Name); }; string d1 = "structure List;"; string d2 = "structure List{int count;int* items;}"; string d3 = "structure List alias Utility.List {int count;int* items;}"; { NativeXStructureDeclaration d = parser(d1); vd1(d); } { NativeXStructureDeclaration d = parser(d2); vd2(d); } { NativeXStructureDeclaration d = parser(d3); vd3(d); } { NativeXStructureDeclaration d = parser(g1 + d1); vg1(d); vd1(d); } { NativeXStructureDeclaration d = parser(g2 + d2); vg2(d); vd2(d); } { NativeXStructureDeclaration d = parser(g3 + d3); vg3(d); vd3(d); } }
protected IEnumerable <TextEditorPopupItem> CreatePopupTypes(CodeScope scope) { Bitmap typeImage = null; Bitmap templateImage = null; Bitmap parameterImage = null; List <TextEditorPopupItem> items = new List <TextEditorPopupItem>(); foreach (CodeNode node in scope.FindAllDistinct()) { { NativeXStructureDeclaration structdecl = node as NativeXStructureDeclaration; if (structdecl != null && structdecl.Name != null) { items.Add(new TextEditorPopupItem() { Text = structdecl.Name, Image = structdecl.GenericParameters == null ? (typeImage ?? (typeImage = Images.Type)) : (templateImage ?? (templateImage = Images.Template)) }); } } { NativeXTypeRenameDeclaration typedecl = node as NativeXTypeRenameDeclaration; if (typedecl != null && typedecl.Name != null) { items.Add(new TextEditorPopupItem() { Text = typedecl.Name, Image = typedecl.GenericParameters == null ? (typeImage ?? (typeImage = Images.Type)) : (templateImage ?? (templateImage = Images.Template)) }); } } { NativeXGenericParameter genparam = node as NativeXGenericParameter; if (genparam != null && genparam.ParameterName != null) { items.Add(new TextEditorPopupItem() { Text = genparam.ParameterName, Image = (parameterImage ?? (parameterImage = Images.Parameter)) }); } } } foreach (string key in NativeXTokenizer.TypedKeywords) { items.Add(new TextEditorPopupItem() { Text = key, Image = (typeImage ?? (typeImage = Images.Type)) }); } foreach (string key in new string[] { "typeof", "function" }) { items.Add(new TextEditorPopupItem() { Text = key, Image = Images.Keyword }); } return(items); }