private void VisitClass(Class c) { if (visitedClasses.Contains(c)) { Skip = true; return; } visitedClasses.Add(c); switch (CurrentPass) { case Pass.DiscoverClassesAndMethods: { TypeSpec baseType = c.BaseType; if (baseType != null) { if (verbose) { Console.WriteLine("[Auto-sealing] Found parent class {0} for class {1}.", baseType.GetSignatureForError(), c.GetSignatureForError()); } baseTypes.Add(baseType); if (baseType.MemberDefinition is ImportedTypeDefinition) { // The base class is coming from another assembly - It will not be visited as part of this assembly // But we still have to get some of its information recursively // and visit all the methods // TODO: Do the parsing work } } break; } case Pass.FinalizeModifierFlags: // Last class of a hierarchy are auto-sealed if they are not static if (IsLeafClass(c.CurrentType) && ((c.ModFlags & Modifiers.STATIC) == 0)) { if (verbose) { Console.WriteLine("[Auto-sealing] Making class {0} sealed.", c.GetSignatureForError()); } // When we seal here, we get proper compile error, however the class does not seem to be marked as sealed in IL //c.ModFlags |= Modifiers.SEALED; } break; } }
private void VisitClass(Class c) { if (visitedClasses.Contains(c)) { Skip = true; return; } visitedClasses.Add(c); switch (CurrentPass) { case Pass.DiscoverClassesAndMethods: { TypeSpec baseType = c.BaseType; if (baseType != null) { if (verbose) { Console.WriteLine("[Auto-sealing] Found parent class {0} for class {1}.", baseType.GetSignatureForError(), c.GetSignatureForError()); } baseTypes.Add (baseType); if (baseType.MemberDefinition is ImportedTypeDefinition) { // The base class is coming from another assembly - It will not be visited as part of this assembly // But we still have to get some of its information recursively // and visit all the methods // TODO: Do the parsing work } } break; } case Pass.FinalizeModifierFlags: // Last class of a hierarchy are auto-sealed if they are not static if (IsLeafClass(c.CurrentType) && ((c.ModFlags & Modifiers.STATIC) == 0)) { if (verbose) { Console.WriteLine("[Auto-sealing] Making class {0} sealed.", c.GetSignatureForError()); } // When we seal here, we get proper compile error, however the class does not seem to be marked as sealed in IL c.ModFlags |= Modifiers.SEALED; } break; } }