private void TypeUseFound(ITypeDefinition t) { Contract.Requires(t != null); Contract.Requires(!(t is Dummy)); Contract.Requires(GarbageCollectHelper.UnspecializeAndResolveTypeReference(t) == t); Contract.Ensures(this.types.Contains(t)); if (this.types.Contains(t)) { return; } // add all base classes of this class foreach (var baseclass in GarbageCollectHelper.BaseClasses(t)) { this.TypeUseFound(GarbageCollectHelper.UnspecializeAndResolveTypeReference(baseclass)); } this.types.Add(t); // add static constructor to worklist var cctor = GarbageCollectHelper.GetStaticConstructor(this.wholeProgram.Host().NameTable, t); if (!(cctor is Dummy)) { this.AddToWorklist(GarbageCollectHelper.UnspecializeAndResolveMethodReference(cctor)); } }