Index: C:/boo-new/src/Boo.Lang.Compiler/Steps/ProcessMethodBodies.cs =================================================================== --- C:/boo-new/src/Boo.Lang.Compiler/Steps/ProcessMethodBodies.cs (revision 2036) +++ C:/boo-new/src/Boo.Lang.Compiler/Steps/ProcessMethodBodies.cs (working copy) @@ -4870,6 +4870,20 @@ } break; } + case NodeType.ClassDefinition: + case NodeType.StructDefinition: + case NodeType.InterfaceDefinition: + case NodeType.EnumDefinition: + { + if (WasVisited(node)) break; + + //visit dependent attributes such as EnumeratorItemType + foreach(Attribute att in ((TypeDefinition)node).Attributes) + { + VisitMemberForTypeResolution(att); + } + break; + } } } } Index: C:/boo-new/tests/testcases/regression/BOO-650-1.boo =================================================================== --- C:/boo-new/tests/testcases/regression/BOO-650-1.boo (revision 0) +++ C:/boo-new/tests/testcases/regression/BOO-650-1.boo (revision 0) @@ -0,0 +1,59 @@ +""" +Homer +Eric +Eric +""" + +import System +import System.Collections +import System.Reflection + +[Module] +class MyClass: + public static def Main(argv as (string)): + c = FooCollection() //FooCollection's enumeratoritemtype visited now + c.Add(Foo("Homer")) + c.Add(Foo("Eric")) + for foo in c: + print(foo.Name) + print c[1].Name + +class Foo: + [getter(Name)] + _name as string + + def constructor(name as string): + _name = name + + +[EnumeratorItemType(Foo)] +[DefaultMember("Item")] +class FooCollection(ICollection): + + _items = [] + + SyncRoot: + get: + return _items.SyncRoot + + Count: + get: + return len(_items) + + IsSynchronized: + get: + return _items.IsSynchronized + + def CopyTo(target as Array, index as int): + _items.CopyTo(target, index) + + def GetEnumerator(): + return _items.GetEnumerator() + + def Add([required] item as Foo): + _items.Add(item) + + Item(index as int) as Foo: + get: + return _items[index] +