public override void ExitXppclassModifiers([NotNull] XP.XppclassModifiersContext context) { SyntaxListBuilder modifiers = _pool.Allocate(); foreach (var m in context._Tokens) { SyntaxToken kw = null; switch (m.Type) { case XP.STATIC: kw = SyntaxFactory.MakeToken(SyntaxKind.InternalKeyword, m.Text); // todo place in unique namespace break; case XP.FINAL: kw = SyntaxFactory.MakeToken(SyntaxKind.SealedKeyword, m.Text); break; default: break; } if (kw != null) { modifiers.AddCheckUnique(kw); } } context.PutList(modifiers.ToList <SyntaxToken>()); _pool.Free(modifiers); }
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); }
private SyntaxList <SyntaxToken> decodeXppMemberModifiers(int visibility, bool isStatic, IList <IToken> tokens = null) { SyntaxListBuilder modifiers = _pool.Allocate(); if (isStatic) { modifiers.Add(SyntaxFactory.MakeToken(SyntaxKind.StaticKeyword, "CLASS")); } else { modifiers.Add(DecodeVisibility(visibility)); } if (tokens != null) { foreach (var token in tokens) { SyntaxToken kw = null; switch (token.Type) { // Member Modifiers from XppMemberModifiers rule case XP.CLASS: kw = SyntaxFactory.MakeToken(SyntaxKind.StaticKeyword, token.Text); break; case XP.STATIC: // remove visibility modifiers // STATIC CLASS (Visibility only in the scope of the prg). // class becomes Internal and is added to the static globals class kw = SyntaxFactory.MakeToken(SyntaxKind.InternalKeyword, token.Text); var tmp = modifiers.ToList(); modifiers.Clear(); foreach (SyntaxToken mod in tmp) { // remove all existing visibility keywords switch (mod.Kind) { case SyntaxKind.ProtectedKeyword: case SyntaxKind.PublicKeyword: case SyntaxKind.PrivateKeyword: case SyntaxKind.InternalKeyword: break; default: modifiers.Add(mod); break; } } break; } if (kw != null) { modifiers.AddCheckUnique(kw); } } } var result = modifiers.ToList <SyntaxToken>(); _pool.Free(modifiers); return(result); }