public static CSharpSyntaxNode Convert(VBasic.VisualBasicSyntaxNode input, SemanticModel semanticModel, Document targetDocument)
		{
			return input.Accept(new NodesVisitor(semanticModel, targetDocument));
		}
		static SyntaxKind ConvertToken(VBasic.SyntaxKind t, TokenContext context = TokenContext.Global)
		{
			switch (t)
			{
				case VBasic.SyntaxKind.None:
					return SyntaxKind.None;
				// built-in types
				case VBasic.SyntaxKind.BooleanKeyword:
					return SyntaxKind.BoolKeyword;
				case VBasic.SyntaxKind.ByteKeyword:
					return SyntaxKind.ByteKeyword;
				case VBasic.SyntaxKind.SByteKeyword:
					return SyntaxKind.SByteKeyword;
				case VBasic.SyntaxKind.ShortKeyword:
					return SyntaxKind.ShortKeyword;
				case VBasic.SyntaxKind.UShortKeyword:
					return SyntaxKind.UShortKeyword;
				case VBasic.SyntaxKind.IntegerKeyword:
					return SyntaxKind.IntKeyword;
				case VBasic.SyntaxKind.UIntegerKeyword:
					return SyntaxKind.UIntKeyword;
				case VBasic.SyntaxKind.LongKeyword:
					return SyntaxKind.LongKeyword;
				case VBasic.SyntaxKind.ULongKeyword:
					return SyntaxKind.ULongKeyword;
				case VBasic.SyntaxKind.DoubleKeyword:
					return SyntaxKind.DoubleKeyword;
				case VBasic.SyntaxKind.SingleKeyword:
					return SyntaxKind.FloatKeyword;
				case VBasic.SyntaxKind.DecimalKeyword:
					return SyntaxKind.DecimalKeyword;
				case VBasic.SyntaxKind.StringKeyword:
					return SyntaxKind.StringKeyword;
				case VBasic.SyntaxKind.CharKeyword:
					return SyntaxKind.CharKeyword;
				case VBasic.SyntaxKind.ObjectKeyword:
					return SyntaxKind.ObjectKeyword;
				// literals
				case VBasic.SyntaxKind.NothingKeyword:
					return SyntaxKind.NullKeyword;
				case VBasic.SyntaxKind.TrueKeyword:
					return SyntaxKind.TrueKeyword;
				case VBasic.SyntaxKind.FalseKeyword:
					return SyntaxKind.FalseKeyword;
				case VBasic.SyntaxKind.MeKeyword:
					return SyntaxKind.ThisKeyword;
				case VBasic.SyntaxKind.MyBaseKeyword:
					return SyntaxKind.BaseKeyword;
				// modifiers
				case VBasic.SyntaxKind.PublicKeyword:
					return SyntaxKind.PublicKeyword;
				case VBasic.SyntaxKind.FriendKeyword:
					return SyntaxKind.InternalKeyword;
				case VBasic.SyntaxKind.ProtectedKeyword:
					return SyntaxKind.ProtectedKeyword;
				case VBasic.SyntaxKind.PrivateKeyword:
					return SyntaxKind.PrivateKeyword;
				case VBasic.SyntaxKind.ByRefKeyword:
					return SyntaxKind.RefKeyword;
				case VBasic.SyntaxKind.ParamArrayKeyword:
					return SyntaxKind.ParamsKeyword;
				case VBasic.SyntaxKind.ReadOnlyKeyword:
					return SyntaxKind.ReadOnlyKeyword;
				case VBasic.SyntaxKind.OverridesKeyword:
					return SyntaxKind.OverrideKeyword;
				case VBasic.SyntaxKind.SharedKeyword:
					return SyntaxKind.StaticKeyword;
				case VBasic.SyntaxKind.ConstKeyword:
					return SyntaxKind.ConstKeyword;
				case VBasic.SyntaxKind.PartialKeyword:
					return SyntaxKind.PartialKeyword;
				// unary operators
				case VBasic.SyntaxKind.UnaryMinusExpression:
					return SyntaxKind.UnaryMinusExpression;
				case VBasic.SyntaxKind.UnaryPlusExpression:
					return SyntaxKind.UnaryPlusExpression;
				case VBasic.SyntaxKind.NotExpression:
					return SyntaxKind.LogicalNotExpression;
				// binary operators
				case VBasic.SyntaxKind.ConcatenateExpression:
				case VBasic.SyntaxKind.AddExpression:
					return SyntaxKind.AddExpression;
				case VBasic.SyntaxKind.SubtractExpression:
					return SyntaxKind.SubtractExpression;
				case VBasic.SyntaxKind.MultiplyExpression:
					return SyntaxKind.MultiplyExpression;
				case VBasic.SyntaxKind.DivideExpression:
					return SyntaxKind.DivideExpression;
				case VBasic.SyntaxKind.AndAlsoExpression:
					return SyntaxKind.LogicalAndExpression;
				case VBasic.SyntaxKind.OrElseExpression:
					return SyntaxKind.LogicalOrExpression;
				case VBasic.SyntaxKind.OrExpression:
					return SyntaxKind.BitwiseOrExpression;
				case VBasic.SyntaxKind.AndExpression:
					return SyntaxKind.BitwiseAndExpression;
				case VBasic.SyntaxKind.ExclusiveOrExpression:
					return SyntaxKind.ExclusiveOrExpression;
				case VBasic.SyntaxKind.EqualsExpression:
					return SyntaxKind.EqualsExpression;
				case VBasic.SyntaxKind.NotEqualsExpression:
					return SyntaxKind.NotEqualsExpression;
				case VBasic.SyntaxKind.GreaterThanExpression:
					return SyntaxKind.GreaterThanExpression;
				case VBasic.SyntaxKind.GreaterThanOrEqualExpression:
					return SyntaxKind.GreaterThanOrEqualExpression;
				case VBasic.SyntaxKind.LessThanExpression:
					return SyntaxKind.LessThanExpression;
				case VBasic.SyntaxKind.LessThanOrEqualExpression:
					return SyntaxKind.LessThanOrEqualExpression;
				// assignment
				case VBasic.SyntaxKind.SimpleAssignmentStatement:
					return SyntaxKind.SimpleAssignmentExpression;
				case VBasic.SyntaxKind.AddAssignmentStatement:
					return SyntaxKind.AddAssignmentExpression;
				case VBasic.SyntaxKind.SubtractAssignmentStatement:
					return SyntaxKind.SubtractAssignmentExpression;
				case VBasic.SyntaxKind.MultiplyAssignmentStatement:
					return SyntaxKind.MultiplyAssignmentExpression;
				case VBasic.SyntaxKind.DivideAssignmentStatement:
					return SyntaxKind.DivideAssignmentExpression;
				// Casts
				case VBasic.SyntaxKind.CObjKeyword:
					return SyntaxKind.ObjectKeyword;
				case VBasic.SyntaxKind.CBoolKeyword:
					return SyntaxKind.BoolKeyword;
				case VBasic.SyntaxKind.CCharKeyword:
					return SyntaxKind.CharKeyword;
				case VBasic.SyntaxKind.CSByteKeyword:
					return SyntaxKind.SByteKeyword;
				case VBasic.SyntaxKind.CByteKeyword:
					return SyntaxKind.ByteKeyword;
				case VBasic.SyntaxKind.CShortKeyword:
					return SyntaxKind.ShortKeyword;
				case VBasic.SyntaxKind.CUShortKeyword:
					return SyntaxKind.UShortKeyword;
				case VBasic.SyntaxKind.CIntKeyword:
					return SyntaxKind.IntKeyword;
				case VBasic.SyntaxKind.CUIntKeyword:
					return SyntaxKind.UIntKeyword;
				case VBasic.SyntaxKind.CLngKeyword:
					return SyntaxKind.LongKeyword;
				case VBasic.SyntaxKind.CULngKeyword:
					return SyntaxKind.ULongKeyword;
				case VBasic.SyntaxKind.CDecKeyword:
					return SyntaxKind.DecimalKeyword;
				case VBasic.SyntaxKind.CSngKeyword:
					return SyntaxKind.FloatKeyword;
				case VBasic.SyntaxKind.CDblKeyword:
					return SyntaxKind.DoubleKeyword;
				case VBasic.SyntaxKind.CStrKeyword:
					return SyntaxKind.StringKeyword;
				//
				case VBasic.SyntaxKind.AssemblyKeyword:
					return SyntaxKind.AssemblyKeyword;
			}
			throw new NotSupportedException(t + " not supported!");
		}