Exemplo n.º 1
0
        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);
            }