117
128
Foldings.Add (new FoldingRegion (new DomRegion (firstChild.StartLocation, node.EndLocation), FoldType.Undefined));
120
public override object VisitCompilationUnit (CompilationUnit unit, object data)
131
public override object VisitSyntaxTree (SyntaxTree unit, object data)
122
133
AddUsings (unit);
123
return base.VisitCompilationUnit (unit, data);
134
return base.VisitSyntaxTree (unit, data);
137
static TextLocation CorrectEnd (AstNode token)
139
return new TextLocation (token.EndLocation.Line, token.EndLocation.Column + 1);
142
static bool LastToken(AstNode arg)
144
return !(arg is NewLineNode || arg is WhitespaceNode || arg is ICSharpCode.NRefactory.CSharp.Comment);
126
147
public override object VisitNamespaceDeclaration (NamespaceDeclaration namespaceDeclaration, object data)
128
149
AddUsings (namespaceDeclaration);
129
if (!namespaceDeclaration.RBraceToken.IsNull)
130
Foldings.Add (new FoldingRegion (new DomRegion (namespaceDeclaration.LBraceToken.GetPrevNode ().EndLocation, namespaceDeclaration.RBraceToken.EndLocation), FoldType.Undefined));
150
if (!namespaceDeclaration.RBraceToken.IsNull && namespaceDeclaration.LBraceToken.StartLocation.Line != namespaceDeclaration.RBraceToken.StartLocation.Line)
151
Foldings.Add (new FoldingRegion (new DomRegion (namespaceDeclaration.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (namespaceDeclaration.RBraceToken)), FoldType.Undefined));
131
152
return base.VisitNamespaceDeclaration (namespaceDeclaration, data);
134
155
public override object VisitTypeDeclaration (TypeDeclaration typeDeclaration, object data)
136
if (!typeDeclaration.RBraceToken.IsNull)
137
Foldings.Add (new FoldingRegion (new DomRegion (typeDeclaration.LBraceToken.GetPrevNode ().EndLocation, typeDeclaration.RBraceToken.StartLocation), FoldType.Type));
157
if (!typeDeclaration.RBraceToken.IsNull && typeDeclaration.LBraceToken.StartLocation.Line != typeDeclaration.RBraceToken.StartLocation.Line)
158
Foldings.Add (new FoldingRegion (new DomRegion (typeDeclaration.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (typeDeclaration.RBraceToken)), FoldType.Type));
138
159
return base.VisitTypeDeclaration (typeDeclaration, data);
141
162
public override object VisitMethodDeclaration (MethodDeclaration methodDeclaration, object data)
143
if (!methodDeclaration.Body.IsNull)
144
Foldings.Add (new FoldingRegion (new DomRegion (methodDeclaration.Body.LBraceToken.GetPrevNode ().EndLocation, methodDeclaration.Body.RBraceToken.StartLocation), FoldType.Member));
164
if (!methodDeclaration.Body.IsNull && methodDeclaration.Body.LBraceToken.StartLocation.Line != methodDeclaration.Body.RBraceToken.StartLocation.Line)
165
Foldings.Add (new FoldingRegion (new DomRegion (methodDeclaration.Body.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (methodDeclaration.Body.RBraceToken)), FoldType.Member));
145
166
return base.VisitMethodDeclaration (methodDeclaration, data);
148
169
public override object VisitConstructorDeclaration (ConstructorDeclaration constructorDeclaration, object data)
150
if (!constructorDeclaration.Body.IsNull)
151
Foldings.Add (new FoldingRegion (new DomRegion (constructorDeclaration.Body.LBraceToken.GetPrevNode ().EndLocation, constructorDeclaration.Body.RBraceToken.StartLocation), FoldType.Member));
171
if (!constructorDeclaration.Body.IsNull && constructorDeclaration.Body.LBraceToken.StartLocation.Line != constructorDeclaration.Body.RBraceToken.StartLocation.Line)
172
Foldings.Add (new FoldingRegion (new DomRegion (constructorDeclaration.Body.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (constructorDeclaration.Body.RBraceToken)), FoldType.Member));
152
173
return base.VisitConstructorDeclaration (constructorDeclaration, data);
155
176
public override object VisitDestructorDeclaration (DestructorDeclaration destructorDeclaration, object data)
157
if (!destructorDeclaration.Body.IsNull)
158
Foldings.Add (new FoldingRegion (new DomRegion (destructorDeclaration.Body.LBraceToken.GetPrevNode ().EndLocation, destructorDeclaration.Body.RBraceToken.StartLocation), FoldType.Member));
178
if (!destructorDeclaration.Body.IsNull && destructorDeclaration.Body.LBraceToken.StartLocation.Line != destructorDeclaration.Body.RBraceToken.StartLocation.Line)
179
Foldings.Add (new FoldingRegion (new DomRegion (destructorDeclaration.Body.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (destructorDeclaration.Body.RBraceToken)), FoldType.Member));
159
180
return base.VisitDestructorDeclaration (destructorDeclaration, data);
162
183
public override object VisitOperatorDeclaration (OperatorDeclaration operatorDeclaration, object data)
164
if (!operatorDeclaration.Body.IsNull)
165
Foldings.Add (new FoldingRegion (new DomRegion (operatorDeclaration.Body.LBraceToken.GetPrevNode ().EndLocation, operatorDeclaration.Body.RBraceToken.StartLocation), FoldType.Member));
185
if (!operatorDeclaration.Body.IsNull && operatorDeclaration.Body.LBraceToken.StartLocation.Line != operatorDeclaration.Body.RBraceToken.StartLocation.Line)
186
Foldings.Add (new FoldingRegion (new DomRegion (operatorDeclaration.Body.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (operatorDeclaration.Body.RBraceToken)), FoldType.Member));
166
187
return base.VisitOperatorDeclaration (operatorDeclaration, data);
169
190
public override object VisitPropertyDeclaration (PropertyDeclaration propertyDeclaration, object data)
171
if (!propertyDeclaration.LBraceToken.IsNull)
172
Foldings.Add (new FoldingRegion (new DomRegion (propertyDeclaration.LBraceToken.GetPrevNode ().EndLocation, propertyDeclaration.RBraceToken.StartLocation), FoldType.Member));
192
if (!propertyDeclaration.LBraceToken.IsNull && propertyDeclaration.LBraceToken.StartLocation.Line != propertyDeclaration.RBraceToken.StartLocation.Line)
193
Foldings.Add (new FoldingRegion (new DomRegion (propertyDeclaration.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (propertyDeclaration.RBraceToken)), FoldType.Member));
173
194
return base.VisitPropertyDeclaration (propertyDeclaration, data);
176
197
public override object VisitIndexerDeclaration (IndexerDeclaration indexerDeclaration, object data)
178
if (!indexerDeclaration.LBraceToken.IsNull)
179
Foldings.Add (new FoldingRegion (new DomRegion (indexerDeclaration.LBraceToken.GetPrevNode ().EndLocation, indexerDeclaration.RBraceToken.StartLocation), FoldType.Member));
199
if (!indexerDeclaration.LBraceToken.IsNull && indexerDeclaration.LBraceToken.StartLocation.Line != indexerDeclaration.RBraceToken.StartLocation.Line)
200
Foldings.Add (new FoldingRegion (new DomRegion (indexerDeclaration.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (indexerDeclaration.RBraceToken)), FoldType.Member));
180
201
return base.VisitIndexerDeclaration (indexerDeclaration, data);
183
204
public override object VisitCustomEventDeclaration (CustomEventDeclaration eventDeclaration, object data)
185
if (!eventDeclaration.LBraceToken.IsNull)
186
Foldings.Add (new FoldingRegion (new DomRegion (eventDeclaration.LBraceToken.GetPrevNode ().EndLocation, eventDeclaration.RBraceToken.StartLocation), FoldType.Member));
206
if (!eventDeclaration.LBraceToken.IsNull && eventDeclaration.LBraceToken.StartLocation.Line != eventDeclaration.RBraceToken.StartLocation.Line)
207
Foldings.Add (new FoldingRegion (new DomRegion (eventDeclaration.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (eventDeclaration.RBraceToken)), FoldType.Member));
187
208
return base.VisitCustomEventDeclaration (eventDeclaration, data);
190
211
public override object VisitSwitchStatement (SwitchStatement switchStatement, object data)
192
if (!switchStatement.RBraceToken.IsNull)
193
Foldings.Add (new FoldingRegion (new DomRegion (switchStatement.LBraceToken.GetPrevNode ().EndLocation, switchStatement.RBraceToken.StartLocation), FoldType.Member));
213
if (!switchStatement.RBraceToken.IsNull && switchStatement.LBraceToken.StartLocation.Line != switchStatement.RBraceToken.StartLocation.Line)
214
Foldings.Add (new FoldingRegion (new DomRegion (switchStatement.LBraceToken.GetPrevNode (LastToken).EndLocation, CorrectEnd (switchStatement.RBraceToken)), FoldType.Member));
194
215
return base.VisitSwitchStatement (switchStatement, data);
197
218
public override object VisitBlockStatement (BlockStatement blockStatement, object data)
199
220
if (!(blockStatement.Parent is EntityDeclaration) && blockStatement.EndLocation.Line - blockStatement.StartLocation.Line > 2) {
200
Foldings.Add (new FoldingRegion (new DomRegion (blockStatement.GetPrevNode ().EndLocation, blockStatement.RBraceToken.StartLocation), FoldType.Undefined));
221
Foldings.Add (new FoldingRegion (new DomRegion (blockStatement.GetPrevNode (LastToken).EndLocation, CorrectEnd (blockStatement.RBraceToken)), FoldType.Undefined));
203
224
return base.VisitBlockStatement (blockStatement, data);
228
static IEnumerable<Tag> GetSemanticTags (SyntaxTree unit)
230
var visitor = new SemanticTagVisitor ();
231
unit.AcceptVisitor (visitor);
232
foreach (var fold in visitor.Tags)
236
public class SemanticTagVisitor : DepthFirstAstVisitor
238
public List<Tag> Tags = new List<Tag> ();
240
public override void VisitThrowStatement (ThrowStatement throwStatement)
242
var createExpression = throwStatement.Expression as ObjectCreateExpression;
243
if (createExpression == null)
245
var st = createExpression.Type as SimpleType;
246
var mt = createExpression.Type as MemberType;
247
if (st != null && st.Identifier == "NotImplementedException" ||
248
mt != null && mt.MemberName == "NotImplementedException" && mt.Target.ToString () == "System") {
250
if (createExpression.Arguments.Any ()) {
251
Tags.Add (new Tag ("High", GettextCatalog.GetString ("NotImplementedException({0}) thrown.", createExpression.Arguments.First ().ToString ()), new DomRegion (throwStatement.StartLocation, throwStatement.EndLocation)));
253
Tags.Add (new Tag ("High", GettextCatalog.GetString ("NotImplementedException thrown."), new DomRegion (throwStatement.StartLocation, throwStatement.EndLocation)));
207
259
void VisitMcsUnit ()
356
408
} catch (Exception) {
359
compilerArguments.SetIgnoreWarning (w);
411
compilerArguments.DisabledWarnings.Add (w);
363
415
return compilerArguments;
366
static Mono.CSharp.LanguageVersion ConvertLanguageVersion (LangVersion ver)
418
internal static Version ConvertLanguageVersion (LangVersion ver)
369
421
case LangVersion.Default:
370
return Mono.CSharp.LanguageVersion.Default;
422
return new Version (5, 0, 0, 0);
371
423
case LangVersion.ISO_1:
372
return Mono.CSharp.LanguageVersion.ISO_1;
424
return new Version (1, 0, 0, 0);
373
425
case LangVersion.ISO_2:
374
return Mono.CSharp.LanguageVersion.ISO_2;
426
return new Version (2, 0, 0, 0);
427
case LangVersion.Version3:
428
return new Version (3, 0, 0, 0);
429
case LangVersion.Version4:
430
return new Version (4, 0, 0, 0);
431
case LangVersion.Version5:
432
return new Version (5, 0, 0, 0);
376
return Mono.CSharp.LanguageVersion.Default;
434
return new Version (5, 0, 0, 0);;