protected override DeclarationModifiers MakeDeclarationModifiers(DeclarationModifiers allowedModifiers, DiagnosticBag diagnostics) { var result = (ContainingType.BaseTypeNoUseSiteDiagnostics.IsObjectType() && ContainingType.IsSealed) ? DeclarationModifiers.Private : DeclarationModifiers.Protected; if (virtualPrintInBase() is object) { result |= DeclarationModifiers.Override; } else { result |= ContainingType.IsSealed ? DeclarationModifiers.None : DeclarationModifiers.Virtual; } Debug.Assert((result & ~allowedModifiers) == 0); #if DEBUG Debug.Assert(modifiersAreValid(result)); #endif return(result); MethodSymbol?virtualPrintInBase() { NamedTypeSymbol baseType = ContainingType.BaseTypeNoUseSiteDiagnostics; if (!baseType.IsObjectType()) { return(FindValidPrintMembersMethod(baseType, ContainingType.DeclaringCompilation)); } return(null); }