2
// <copyright see="prj:///doc/copyright.txt"/>
3
// <license see="prj:///doc/license.txt"/>
4
// <owner name="none" email=""/>
5
// <version>$Revision: 4482 $</version>
9
using System.Collections.Generic;
11
namespace ICSharpCode.OldNRefactory
13
public class PreprocessingDirective : AbstractSpecial
15
#region Conversion C# <-> VB
16
public static void VBToCSharp(IList<ISpecial> list)
18
for (int i = 0; i < list.Count; ++i) {
19
if (list[i] is PreprocessingDirective)
20
list[i] = VBToCSharp((PreprocessingDirective)list[i]);
24
public static PreprocessingDirective VBToCSharp(PreprocessingDirective dir)
28
if (cmd.Equals("#End", StringComparison.InvariantCultureIgnoreCase)) {
29
if (arg.ToLowerInvariant().StartsWith("region")) {
32
} else if ("if".Equals(arg, StringComparison.InvariantCultureIgnoreCase)) {
36
} else if (cmd.Equals("#Region", StringComparison.InvariantCultureIgnoreCase)) {
38
} else if (cmd.Equals("#If", StringComparison.InvariantCultureIgnoreCase)) {
40
if (arg.ToLowerInvariant().EndsWith(" then"))
41
arg = arg.Substring(0, arg.Length - 5);
42
} else if (cmd.Equals("#Else", StringComparison.InvariantCultureIgnoreCase)) {
43
if (dir.Expression != null)
47
} else if (cmd.Equals("#ElseIf", StringComparison.InvariantCultureIgnoreCase)) {
50
return new PreprocessingDirective(cmd, arg, dir.StartPosition, dir.EndPosition) {
51
Expression = dir.Expression
55
public static void CSharpToVB(List<ISpecial> list)
57
for (int i = 0; i < list.Count; ++i) {
58
if (list[i] is PreprocessingDirective)
59
list[i] = CSharpToVB((PreprocessingDirective)list[i]);
63
public static PreprocessingDirective CSharpToVB(PreprocessingDirective dir)
70
if (!arg.StartsWith("\"")) {
71
arg = "\"" + arg.Trim() + "\"";
87
cmd = cmd.Substring(0, 2).ToUpperInvariant() + cmd.Substring(2);
89
return new PreprocessingDirective(cmd, arg, dir.StartPosition, dir.EndPosition) {
90
Expression = dir.Expression
97
Ast.Expression expression = Ast.Expression.Null;
100
/// Gets the directive name, including '#'.
107
cmd = value ?? string.Empty;
112
/// Gets the directive argument.
119
arg = value ?? string.Empty;
124
/// Gets/sets the expression (for directives that take an expression, e.g. #if and #elif).
126
public Ast.Expression Expression {
127
get { return expression; }
128
set { expression = value ?? Ast.Expression.Null; }
132
/// The end position of the pre processor directive line.
133
/// May be != EndPosition.
135
public Location LastLineEnd {
141
public override string ToString()
143
return String.Format("[PreProcessingDirective: Cmd = {0}, Arg = {1}]",
148
public PreprocessingDirective(string cmd, string arg, Location start, Location end)
155
public override object AcceptVisitor(ISpecialVisitor visitor, object data)
157
return visitor.Visit(this, data);