private static bool IgnoreInContext(SyntaxToken m, SyntaxKindExtensions.TokenContext context) { switch (context) { case SyntaxKindExtensions.TokenContext.InterfaceOrModule: return(m.IsKind(Microsoft.CodeAnalysis.CSharp.SyntaxKind.PublicKeyword, Microsoft.CodeAnalysis.CSharp.SyntaxKind.StaticKeyword)); } return(false); }
private SyntaxToken?ConvertModifier(SyntaxToken m, SyntaxKindExtensions.TokenContext context = SyntaxKindExtensions.TokenContext.Global) { SyntaxKind vbSyntaxKind = VisualBasicExtensions.Kind(m); switch (vbSyntaxKind) { case SyntaxKind.DateKeyword: return(SyntaxFactory.Identifier("DateTime")); } var token = vbSyntaxKind.ConvertToken(context); return(token == Microsoft.CodeAnalysis.CSharp.SyntaxKind.None ? null : new SyntaxToken?(SyntaxFactory.Token(token))); }
private static SyntaxToken CSharpDefaultVisibility(SyntaxKindExtensions.TokenContext context) { switch (context) { case SyntaxKindExtensions.TokenContext.Global: return(SyntaxFactory.Token(SyntaxKind.FriendKeyword)); case SyntaxKindExtensions.TokenContext.Local: case SyntaxKindExtensions.TokenContext.VariableOrConst: case SyntaxKindExtensions.TokenContext.Member: return(SyntaxFactory.Token(SyntaxKind.PrivateKeyword)); } throw new ArgumentOutOfRangeException(nameof(context)); }
private bool IgnoreInContext(SyntaxToken m, SyntaxKindExtensions.TokenContext context) { switch (VisualBasicExtensions.Kind(m)) { case SyntaxKind.OptionalKeyword: case SyntaxKind.ByValKeyword: case SyntaxKind.IteratorKeyword: case SyntaxKind.DimKeyword: return(true); default: return(false); } }
private SyntaxToken VisualBasicDefaultVisibility(SyntaxKindExtensions.TokenContext context, bool isVariableOrConst) { switch (context) { case SyntaxKindExtensions.TokenContext.Global: case SyntaxKindExtensions.TokenContext.InterfaceOrModule: return(SyntaxFactory.Token(Microsoft.CodeAnalysis.CSharp.SyntaxKind.InternalKeyword)); case SyntaxKindExtensions.TokenContext.MemberInModule: case SyntaxKindExtensions.TokenContext.MemberInClass: case SyntaxKindExtensions.TokenContext.MemberInInterface: return(SyntaxFactory.Token(isVariableOrConst ? Microsoft.CodeAnalysis.CSharp.SyntaxKind.PrivateKeyword : Microsoft.CodeAnalysis.CSharp.SyntaxKind.PublicKeyword)); case SyntaxKindExtensions.TokenContext.MemberInStruct: return(SyntaxFactory.Token(Microsoft.CodeAnalysis.CSharp.SyntaxKind.PublicKeyword)); case SyntaxKindExtensions.TokenContext.Local: return(SyntaxFactory.Token(Microsoft.CodeAnalysis.CSharp.SyntaxKind.PrivateKeyword)); } throw new ArgumentOutOfRangeException(nameof(context), context, "Specified argument was out of the range of valid values."); }
private static SyntaxToken?ConvertModifier(SyntaxToken m, SyntaxKindExtensions.TokenContext context = SyntaxKindExtensions.TokenContext.Global) { var token = CSharpExtensions.Kind(m).ConvertToken(context); return(token == SyntaxKind.None ? null : new SyntaxToken?(SyntaxFactory.Token(token))); }
internal static SyntaxTokenList ConvertModifiers(IEnumerable <SyntaxToken> modifiers, SyntaxKindExtensions.TokenContext context = SyntaxKindExtensions.TokenContext.Global) { return(SyntaxFactory.TokenList(ConvertModifiersCore(modifiers, context))); }
private static IEnumerable <SyntaxToken> ConvertModifiersCore(IEnumerable <SyntaxToken> modifiers, SyntaxKindExtensions.TokenContext context) { if (context != SyntaxKindExtensions.TokenContext.Local && context != SyntaxKindExtensions.TokenContext.InterfaceOrModule) { bool visibility = false; foreach (var token in modifiers) { if (token.IsCsVisibility(context == SyntaxKindExtensions.TokenContext.VariableOrConst)) { visibility = true; break; } } if (!visibility && context == SyntaxKindExtensions.TokenContext.Member) { yield return(CSharpDefaultVisibility(context)); } } foreach (var token in modifiers.Where(m => !IgnoreInContext(m, context))) { var m = ConvertModifier(token, context); if (m.HasValue) { yield return(m.Value); } } }
private IEnumerable <SyntaxToken> ConvertModifiersCore(IEnumerable <SyntaxToken> modifiers, SyntaxKindExtensions.TokenContext context, bool isVariableOrConst = false) { var contextsWithIdenticalDefaults = new[] { SyntaxKindExtensions.TokenContext.Global, SyntaxKindExtensions.TokenContext.Local, SyntaxKindExtensions.TokenContext.InterfaceOrModule, SyntaxKindExtensions.TokenContext.MemberInInterface }; if (!contextsWithIdenticalDefaults.Contains(context)) { bool visibility = false; foreach (var token in modifiers) { if (SyntaxTokenExtensions.IsVbVisibility(token, isVariableOrConst)) { visibility = true; break; } } if (!visibility) { yield return(VisualBasicDefaultVisibility(context, isVariableOrConst)); } } foreach (var token in modifiers.Where(m => !IgnoreInContext(m, context)).OrderBy(m => SyntaxTokenExtensions.IsKind(m, SyntaxKind.PartialKeyword))) { var m = ConvertModifier(token, context); if (m.HasValue) { yield return(m.Value); } } if (context == SyntaxKindExtensions.TokenContext.MemberInModule) { yield return(SyntaxFactory.Token(Microsoft.CodeAnalysis.CSharp.SyntaxKind.StaticKeyword)); } }
public SyntaxTokenList ConvertModifiers(IEnumerable <SyntaxToken> modifiers, SyntaxKindExtensions.TokenContext context = SyntaxKindExtensions.TokenContext.Global, bool isVariableOrConst = false) { return(SyntaxFactory.TokenList(ConvertModifiersCore(modifiers, context, isVariableOrConst).Where(t => CSharpExtensions.Kind(t) != Microsoft.CodeAnalysis.CSharp.SyntaxKind.None))); }
private static bool IsVisibility(SyntaxToken token, SyntaxKindExtensions.TokenContext context) { return(token.IsKind(Microsoft.CodeAnalysis.CSharp.SyntaxKind.PublicKeyword, Microsoft.CodeAnalysis.CSharp.SyntaxKind.InternalKeyword, Microsoft.CodeAnalysis.CSharp.SyntaxKind.ProtectedKeyword, Microsoft.CodeAnalysis.CSharp.SyntaxKind.PrivateKeyword) || (context == SyntaxKindExtensions.TokenContext.VariableOrConst && SyntaxTokenExtensions.IsKind(token, Microsoft.CodeAnalysis.CSharp.SyntaxKind.ConstKeyword))); }