public override void ExitXppdeclareModifiers([NotNull] XP.XppdeclareModifiersContext context)
        {
            SyntaxListBuilder modifiers = _pool.Allocate();
            bool hasFinal   = false;
            bool noOverRide = false;

            foreach (var m in context._Tokens)
            {
                SyntaxToken kw = null;
                switch (m.Type)
                {
                case XP.DEFERRED:     // DEFERRED METHOD becomes ABSTRACT METHOD
                    kw = SyntaxFactory.MakeToken(SyntaxKind.AbstractKeyword, m.Text);
                    break;

                case XP.FINAL:     // FINAL METHOD will generate non virtual method, even when the Default Virtual is on
                    hasFinal = true;
                    break;

                case XP.INTRODUCE:     //  INTRODUCE METHOD will generate NEW METHOD
                    kw         = SyntaxFactory.MakeToken(SyntaxKind.NewKeyword, m.Text);
                    noOverRide = true;
                    break;

                case XP.OVERRIDE:     // OVERRIDE METHOD is obvious
                    kw = SyntaxFactory.MakeToken(SyntaxKind.OverrideKeyword, m.Text);
                    break;

                case XP.CLASS:
                    kw = SyntaxFactory.MakeToken(SyntaxKind.StaticKeyword, m.Text);
                    break;

                case XP.SYNC:       // Handled later
                    break;

                default:
                    break;
                }
                if (kw != null)
                {
                    modifiers.AddCheckUnique(kw);
                }
            }
            if (_options.VirtualInstanceMethods && !hasFinal)
            {
                modifiers.FixDefaultVirtual();
            }
            else if (!noOverRide && !hasFinal)
            {
                modifiers.FixDefaultMethod();
            }
            context.PutList(modifiers.ToList <SyntaxToken>());
            _pool.Free(modifiers);
        }