Browse Source

Fixed some NRefactory bugs, added NRefactory unit tests.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1080 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
6c0473638e
  1. 23
      src/Libraries/NRefactory/NRefactoryASTGenerator/Main.cs
  2. 46
      src/Libraries/NRefactory/Project/Src/Output/AbstractOutputFormatter.cs
  3. 17
      src/Libraries/NRefactory/Project/Src/Output/CSharp/CSharpOutputVisitor.cs
  4. 18
      src/Libraries/NRefactory/Project/Src/Output/CSharp/OutputFormatter.cs
  5. 4
      src/Libraries/NRefactory/Project/Src/Output/IOutputASTVisitor.cs
  6. 28
      src/Libraries/NRefactory/Project/Src/Output/SpecialNodesInserter.cs
  7. 8
      src/Libraries/NRefactory/Project/Src/Output/VBNet/VBNetOutputFormatter.cs
  8. 36
      src/Libraries/NRefactory/Project/Src/Output/VBNet/VBNetOutputVisitor.cs
  9. 5
      src/Libraries/NRefactory/Project/Src/Parser/AST/General/BlockStatement.cs
  10. 177
      src/Libraries/NRefactory/Project/Src/Parser/Visitors/AbstractASTVisitor.cs
  11. 478
      src/Libraries/NRefactory/Project/Src/Parser/Visitors/AbstractAstTransformer.cs
  12. 37
      src/Libraries/NRefactory/Project/Src/Parser/Visitors/PrefixFieldsVisitor.cs
  13. 33
      src/Libraries/NRefactory/Project/Src/Parser/Visitors/VBNetConstructsConvertVisitor.cs
  14. 1
      src/Libraries/NRefactory/Test/NRefactoryTests.csproj
  15. 93
      src/Libraries/NRefactory/Test/Output/CSharp/CSharpOutputTest.cs
  16. 62
      src/Libraries/NRefactory/Test/Output/CSharp/VBToCSharpConverterTest.cs
  17. 67
      src/Libraries/NRefactory/Test/Output/SpecialOutputVisitor.cs
  18. 51
      src/Libraries/NRefactory/Test/Output/VBNet/CSharpToVBConverterTest.cs

23
src/Libraries/NRefactory/NRefactoryASTGenerator/Main.cs

@ -223,13 +223,7 @@ namespace NRefactoryASTGenerator
CodeVariableReferenceExpression var = new CodeVariableReferenceExpression(GetFieldName(type.Name)); CodeVariableReferenceExpression var = new CodeVariableReferenceExpression(GetFieldName(type.Name));
assertions.Add(AssertIsNotNull(var)); assertions.Add(AssertIsNotNull(var));
Type t = type; AddFieldVisitCode(m, type, var, assertions, transformer);
do {
foreach (FieldInfo field in t.GetFields(BindingFlags.Instance | BindingFlags.NonPublic)) {
AddVisitCode(m, field, var, assertions, transformer);
}
t = t.BaseType;
} while (t != null);
if (type.GetCustomAttributes(typeof(HasChildrenAttribute), true).Length > 0) { if (type.GetCustomAttributes(typeof(HasChildrenAttribute), true).Length > 0) {
if (transformer) { if (transformer) {
@ -262,6 +256,21 @@ namespace NRefactoryASTGenerator
return td; return td;
} }
static void AddFieldVisitCode(CodeMemberMethod m, Type type, CodeVariableReferenceExpression var, List<CodeStatement> assertions, bool transformer)
{
if (type != null) {
if (type.BaseType != typeof(StatementWithEmbeddedStatement)) {
AddFieldVisitCode(m, type.BaseType, var, assertions, transformer);
}
foreach (FieldInfo field in type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic)) {
AddVisitCode(m, field, var, assertions, transformer);
}
if (type.BaseType == typeof(StatementWithEmbeddedStatement)) {
AddFieldVisitCode(m, type.BaseType, var, assertions, transformer);
}
}
}
static CodeStatement AssertIsNotNull(CodeExpression expr) static CodeStatement AssertIsNotNull(CodeExpression expr)
{ {
CodeExpression bop = new CodeBinaryOperatorExpression(expr, CodeExpression bop = new CodeBinaryOperatorExpression(expr,

46
src/Libraries/NRefactory/Project/Src/Output/AbstractOutputFormatter.cs

@ -92,6 +92,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
} }
int lastLineStart = 0; int lastLineStart = 0;
int lineBeforeLastStart = 0;
public bool LastCharacterIsNewLine { public bool LastCharacterIsNewLine {
get { get {
@ -102,6 +103,9 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
public virtual void NewLine() public virtual void NewLine()
{ {
if (DoNewLine) { if (DoNewLine) {
if (!LastCharacterIsNewLine) {
lineBeforeLastStart = lastLineStart;
}
text.AppendLine(); text.AppendLine();
lastLineStart = text.Length; lastLineStart = text.Length;
} }
@ -111,19 +115,31 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
{ {
} }
protected void WriteInPreviousLine(string txt) protected void WriteInPreviousLine(string txt, bool forceWriteInPreviousBlock)
{ {
if (LastCharacterIsNewLine) { bool lastCharacterWasNewLine = LastCharacterIsNewLine;
Indent(); if (lastCharacterWasNewLine) {
text.AppendLine(txt); if (forceWriteInPreviousBlock == false) {
lastLineStart = text.Length; Indent();
} else { text.AppendLine(txt);
string lastLine = text.ToString(lastLineStart, text.Length - lastLineStart); lineBeforeLastStart = lastLineStart;
text.Remove(lastLineStart, text.Length - lastLineStart); lastLineStart = text.Length;
Indent(); return;
text.AppendLine(txt); }
lastLineStart = lineBeforeLastStart;
}
string lastLine = text.ToString(lastLineStart, text.Length - lastLineStart);
text.Remove(lastLineStart, text.Length - lastLineStart);
if (forceWriteInPreviousBlock) ++indentationLevel;
Indent();
if (forceWriteInPreviousBlock) --indentationLevel;
text.AppendLine(txt);
lineBeforeLastStart = lastLineStart;
lastLineStart = text.Length;
text.Append(lastLine);
if (lastCharacterWasNewLine) {
lineBeforeLastStart = lastLineStart;
lastLineStart = text.Length; lastLineStart = text.Length;
text.Append(lastLine);
} }
} }
@ -135,14 +151,14 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
} }
} }
public abstract void PrintComment(Comment comment); public abstract void PrintComment(Comment comment, bool forceWriteInPreviousBlock);
public virtual void PrintPreProcessingDirective(PreProcessingDirective directive) public virtual void PrintPreProcessingDirective(PreProcessingDirective directive, bool forceWriteInPreviousBlock)
{ {
if (string.IsNullOrEmpty(directive.Arg)) if (string.IsNullOrEmpty(directive.Arg))
WriteInPreviousLine(directive.Cmd); WriteInPreviousLine(directive.Cmd, forceWriteInPreviousBlock);
else else
WriteInPreviousLine(directive.Cmd + " " + directive.Arg); WriteInPreviousLine(directive.Cmd + " " + directive.Arg, forceWriteInPreviousBlock);
} }
public abstract void PrintToken(int token); public abstract void PrintToken(int token);

17
src/Libraries/NRefactory/Project/Src/Output/CSharp/CSharpOutputVisitor.cs

@ -95,8 +95,6 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
return "float"; return "float";
case "System.Decimal": case "System.Decimal":
return "decimal"; return "decimal";
case "System.DateTime":
return "System.DateTime";
case "System.Int64": case "System.Int64":
return "long"; return "long";
case "System.Int32": case "System.Int32":
@ -725,7 +723,10 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
outputFormatter.Indent(); outputFormatter.Indent();
OutputModifier(destructorDeclaration.Modifier); OutputModifier(destructorDeclaration.Modifier);
outputFormatter.PrintToken(Tokens.BitwiseComplement); outputFormatter.PrintToken(Tokens.BitwiseComplement);
outputFormatter.PrintIdentifier(destructorDeclaration.Name); if (currentType != null)
outputFormatter.PrintIdentifier(currentType.Name);
else
outputFormatter.PrintIdentifier(destructorDeclaration.Name);
if (prettyPrintOptions.BeforeConstructorDeclarationParentheses) { if (prettyPrintOptions.BeforeConstructorDeclarationParentheses) {
outputFormatter.Space(); outputFormatter.Space();
} }
@ -881,15 +882,17 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
public object Visit(EraseStatement eraseStatement, object data) public object Visit(EraseStatement eraseStatement, object data)
{ {
foreach (Expression expr in eraseStatement.Expressions) { for (int i = 0; i < eraseStatement.Expressions.Count; i++) {
outputFormatter.Indent(); if (i > 0) {
expr.AcceptVisitor(this, data); outputFormatter.NewLine();
outputFormatter.Indent();
}
nodeTracker.TrackedVisit(eraseStatement.Expressions[i], data);
outputFormatter.Space(); outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Assign); outputFormatter.PrintToken(Tokens.Assign);
outputFormatter.Space(); outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Null); outputFormatter.PrintToken(Tokens.Null);
outputFormatter.PrintToken(Tokens.Semicolon); outputFormatter.PrintToken(Tokens.Semicolon);
outputFormatter.NewLine();
} }
return null; return null;
} }

18
src/Libraries/NRefactory/Project/Src/Output/CSharp/OutputFormatter.cs

@ -114,19 +114,23 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
PrintText(identifier); PrintText(identifier);
} }
public override void PrintComment(Comment comment) public override void PrintComment(Comment comment, bool forceWriteInPreviousBlock)
{ {
switch (comment.CommentType) { switch (comment.CommentType) {
case CommentType.Block: case CommentType.Block:
PrintText("/*"); if (forceWriteInPreviousBlock) {
PrintText(comment.CommentText); WriteInPreviousLine("/*" + comment.CommentText + "*/", forceWriteInPreviousBlock);
PrintText("*/"); } else {
PrintText("/*");
PrintText(comment.CommentText);
PrintText("*/");
}
break; break;
case CommentType.Documentation: case CommentType.Documentation:
WriteInPreviousLine("///" + comment.CommentText); WriteInPreviousLine("///" + comment.CommentText, forceWriteInPreviousBlock);
break; break;
default: default:
WriteInPreviousLine("//" + comment.CommentText); WriteInPreviousLine("//" + comment.CommentText, forceWriteInPreviousBlock);
break; break;
} }
} }

4
src/Libraries/NRefactory/Project/Src/Output/IOutputASTVisitor.cs

@ -52,7 +52,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
} }
void NewLine(); void NewLine();
void Indent(); void Indent();
void PrintComment(Comment comment); void PrintComment(Comment comment, bool forceWriteInPreviousBlock);
void PrintPreProcessingDirective(PreProcessingDirective directive); void PrintPreProcessingDirective(PreProcessingDirective directive, bool forceWriteInPreviousBlock);
} }
} }

28
src/Libraries/NRefactory/Project/Src/Output/SpecialNodesInserter.cs

@ -22,6 +22,8 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
this.formatter = formatter; this.formatter = formatter;
} }
public bool ForceWriteInPreviousLine;
public object Visit(ISpecial special, object data) public object Visit(ISpecial special, object data)
{ {
Console.WriteLine("Warning: SpecialOutputVisitor.Visit(ISpecial) called with " + special); Console.WriteLine("Warning: SpecialOutputVisitor.Visit(ISpecial) called with " + special);
@ -36,13 +38,13 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
public object Visit(Comment special, object data) public object Visit(Comment special, object data)
{ {
formatter.PrintComment(special); formatter.PrintComment(special, ForceWriteInPreviousLine);
return data; return data;
} }
public object Visit(PreProcessingDirective special, object data) public object Visit(PreProcessingDirective special, object data)
{ {
formatter.PrintPreProcessingDirective(special); formatter.PrintPreProcessingDirective(special, ForceWriteInPreviousLine);
return data; return data;
} }
} }
@ -50,7 +52,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
/// <summary> /// <summary>
/// This class inserts specials between INodes. /// This class inserts specials between INodes.
/// </summary> /// </summary>
public class SpecialNodesInserter public class SpecialNodesInserter : IDisposable
{ {
IEnumerator<ISpecial> enumerator; IEnumerator<ISpecial> enumerator;
SpecialOutputVisitor visitor; SpecialOutputVisitor visitor;
@ -84,7 +86,9 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
/// </summary> /// </summary>
public void AcceptNodeEnd(INode node) public void AcceptNodeEnd(INode node)
{ {
visitor.ForceWriteInPreviousLine = true;
AcceptPoint(node.EndLocation); AcceptPoint(node.EndLocation);
visitor.ForceWriteInPreviousLine = false;
} }
/// <summary> /// <summary>
@ -111,5 +115,23 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
WriteCurrent(); WriteCurrent();
} }
} }
void IDisposable.Dispose()
{
Finish();
}
/// <summary>
/// Registers a new SpecialNodesInserter with the output visitor.
/// Make sure to call Finish() on the returned SpecialNodesInserter when the output
/// is finished.
/// </summary>
public static SpecialNodesInserter Install(IEnumerable<ISpecial> specials, IOutputASTVisitor outputVisitor)
{
SpecialNodesInserter sni = new SpecialNodesInserter(specials, new SpecialOutputVisitor(outputVisitor.OutputFormatter));
outputVisitor.NodeTracker.NodeVisiting += sni.AcceptNodeStart;
outputVisitor.NodeTracker.NodeVisited += sni.AcceptNodeEnd;
return sni;
}
} }
} }

8
src/Libraries/NRefactory/Project/Src/Output/VBNet/VBNetOutputFormatter.cs

@ -42,17 +42,17 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
} }
} }
public override void PrintComment(Comment comment) public override void PrintComment(Comment comment, bool forceWriteInPreviousLine)
{ {
switch (comment.CommentType) { switch (comment.CommentType) {
case CommentType.Block: case CommentType.Block:
WriteInPreviousLine("'" + comment.CommentText.Replace("\n", "\n'")); WriteInPreviousLine("'" + comment.CommentText.Replace("\n", "\n'"), forceWriteInPreviousLine);
break; break;
case CommentType.Documentation: case CommentType.Documentation:
WriteInPreviousLine("'''" + comment.CommentText); WriteInPreviousLine("'''" + comment.CommentText, forceWriteInPreviousLine);
break; break;
default: default:
WriteInPreviousLine("'" + comment.CommentText); WriteInPreviousLine("'" + comment.CommentText, forceWriteInPreviousLine);
break; break;
} }
} }

36
src/Libraries/NRefactory/Project/Src/Output/VBNet/VBNetOutputVisitor.cs

@ -561,7 +561,6 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
outputFormatter.PrintToken(Tokens.End); outputFormatter.PrintToken(Tokens.End);
outputFormatter.Space(); outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Property); outputFormatter.PrintToken(Tokens.Property);
outputFormatter.Space();
outputFormatter.NewLine(); outputFormatter.NewLine();
} }
@ -867,7 +866,6 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
outputFormatter.PrintToken(Tokens.End); outputFormatter.PrintToken(Tokens.End);
outputFormatter.Space(); outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Sub); outputFormatter.PrintToken(Tokens.Sub);
outputFormatter.Space();
outputFormatter.NewLine(); outputFormatter.NewLine();
return null; return null;
@ -939,19 +937,36 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
public object Visit(DestructorDeclaration destructorDeclaration, object data) public object Visit(DestructorDeclaration destructorDeclaration, object data)
{ {
outputFormatter.Indent(); outputFormatter.Indent();
outputFormatter.PrintText("Protected Overrides Sub Finalize()");
outputFormatter.PrintToken(Tokens.Overrides);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Protected);
outputFormatter.Space();
outputFormatter.PrintIdentifier("Finalize");
outputFormatter.PrintToken(Tokens.OpenParenthesis);
outputFormatter.PrintToken(Tokens.CloseParenthesis);
outputFormatter.NewLine(); outputFormatter.NewLine();
++outputFormatter.IndentationLevel; ++outputFormatter.IndentationLevel;
exitTokenStack.Push(Tokens.Sub); exitTokenStack.Push(Tokens.Sub);
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.Try);
outputFormatter.NewLine();
++outputFormatter.IndentationLevel;
nodeTracker.TrackedVisit(destructorDeclaration.Body, data); nodeTracker.TrackedVisit(destructorDeclaration.Body, data);
--outputFormatter.IndentationLevel;
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.Finally);
outputFormatter.NewLine();
++outputFormatter.IndentationLevel;
outputFormatter.Indent();
outputFormatter.PrintText("MyBase.Finalize()");
outputFormatter.NewLine();
--outputFormatter.IndentationLevel;
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.End);
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Try);
outputFormatter.NewLine();
exitTokenStack.Pop(); exitTokenStack.Pop();
--outputFormatter.IndentationLevel; --outputFormatter.IndentationLevel;
@ -959,7 +974,6 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
outputFormatter.PrintToken(Tokens.End); outputFormatter.PrintToken(Tokens.End);
outputFormatter.Space(); outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Sub); outputFormatter.PrintToken(Tokens.Sub);
outputFormatter.Space();
outputFormatter.NewLine(); outputFormatter.NewLine();
return null; return null;

5
src/Libraries/NRefactory/Project/Src/Parser/AST/General/BlockStatement.cs

@ -21,11 +21,6 @@ namespace ICSharpCode.NRefactory.Parser.AST
} }
} }
public static BlockStatement CheckNull(BlockStatement blockStatement)
{
return blockStatement == null ? NullBlockStatement.Instance : blockStatement;
}
public override object AcceptVisitor(IAstVisitor visitor, object data) public override object AcceptVisitor(IAstVisitor visitor, object data)
{ {
return visitor.Visit(this, data); return visitor.Visit(this, data);

177
src/Libraries/NRefactory/Project/Src/Parser/Visitors/AbstractASTVisitor.cs

@ -181,21 +181,20 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(ConstructorDeclaration constructorDeclaration, object data) { public virtual object Visit(ConstructorDeclaration constructorDeclaration, object data) {
Debug.Assert((constructorDeclaration != null)); Debug.Assert((constructorDeclaration != null));
Debug.Assert((constructorDeclaration.Attributes != null));
Debug.Assert((constructorDeclaration.Parameters != null));
Debug.Assert((constructorDeclaration.ConstructorInitializer != null)); Debug.Assert((constructorDeclaration.ConstructorInitializer != null));
Debug.Assert((constructorDeclaration.Body != null)); Debug.Assert((constructorDeclaration.Body != null));
Debug.Assert((constructorDeclaration.Parameters != null)); foreach (AttributeSection o in constructorDeclaration.Attributes) {
Debug.Assert((constructorDeclaration.Attributes != null));
constructorDeclaration.ConstructorInitializer.AcceptVisitor(this, data);
constructorDeclaration.Body.AcceptVisitor(this, data);
foreach (ParameterDeclarationExpression o in constructorDeclaration.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (AttributeSection o in constructorDeclaration.Attributes) { foreach (ParameterDeclarationExpression o in constructorDeclaration.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
return null; constructorDeclaration.ConstructorInitializer.AcceptVisitor(this, data);
return constructorDeclaration.Body.AcceptVisitor(this, data);
} }
public virtual object Visit(ConstructorInitializer constructorInitializer, object data) { public virtual object Visit(ConstructorInitializer constructorInitializer, object data) {
@ -215,19 +214,18 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(DeclareDeclaration declareDeclaration, object data) { public virtual object Visit(DeclareDeclaration declareDeclaration, object data) {
Debug.Assert((declareDeclaration != null)); Debug.Assert((declareDeclaration != null));
Debug.Assert((declareDeclaration.TypeReference != null));
Debug.Assert((declareDeclaration.Parameters != null));
Debug.Assert((declareDeclaration.Attributes != null)); Debug.Assert((declareDeclaration.Attributes != null));
declareDeclaration.TypeReference.AcceptVisitor(this, data); Debug.Assert((declareDeclaration.Parameters != null));
foreach (ParameterDeclarationExpression o in declareDeclaration.Parameters) { Debug.Assert((declareDeclaration.TypeReference != null));
foreach (AttributeSection o in declareDeclaration.Attributes) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (AttributeSection o in declareDeclaration.Attributes) { foreach (ParameterDeclarationExpression o in declareDeclaration.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
return null; return declareDeclaration.TypeReference.AcceptVisitor(this, data);
} }
public virtual object Visit(DefaultValueExpression defaultValueExpression, object data) { public virtual object Visit(DefaultValueExpression defaultValueExpression, object data) {
@ -238,20 +236,20 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(DelegateDeclaration delegateDeclaration, object data) { public virtual object Visit(DelegateDeclaration delegateDeclaration, object data) {
Debug.Assert((delegateDeclaration != null)); Debug.Assert((delegateDeclaration != null));
Debug.Assert((delegateDeclaration.Attributes != null));
Debug.Assert((delegateDeclaration.ReturnType != null)); Debug.Assert((delegateDeclaration.ReturnType != null));
Debug.Assert((delegateDeclaration.Parameters != null)); Debug.Assert((delegateDeclaration.Parameters != null));
Debug.Assert((delegateDeclaration.Templates != null)); Debug.Assert((delegateDeclaration.Templates != null));
Debug.Assert((delegateDeclaration.Attributes != null)); foreach (AttributeSection o in delegateDeclaration.Attributes) {
delegateDeclaration.ReturnType.AcceptVisitor(this, data);
foreach (ParameterDeclarationExpression o in delegateDeclaration.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (TemplateDefinition o in delegateDeclaration.Templates) { delegateDeclaration.ReturnType.AcceptVisitor(this, data);
foreach (ParameterDeclarationExpression o in delegateDeclaration.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (AttributeSection o in delegateDeclaration.Attributes) { foreach (TemplateDefinition o in delegateDeclaration.Templates) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
@ -260,14 +258,13 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(DestructorDeclaration destructorDeclaration, object data) { public virtual object Visit(DestructorDeclaration destructorDeclaration, object data) {
Debug.Assert((destructorDeclaration != null)); Debug.Assert((destructorDeclaration != null));
Debug.Assert((destructorDeclaration.Body != null));
Debug.Assert((destructorDeclaration.Attributes != null)); Debug.Assert((destructorDeclaration.Attributes != null));
destructorDeclaration.Body.AcceptVisitor(this, data); Debug.Assert((destructorDeclaration.Body != null));
foreach (AttributeSection o in destructorDeclaration.Attributes) { foreach (AttributeSection o in destructorDeclaration.Attributes) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
return null; return destructorDeclaration.Body.AcceptVisitor(this, data);
} }
public virtual object Visit(DirectionExpression directionExpression, object data) { public virtual object Visit(DirectionExpression directionExpression, object data) {
@ -320,15 +317,15 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(EventAddRegion eventAddRegion, object data) { public virtual object Visit(EventAddRegion eventAddRegion, object data) {
Debug.Assert((eventAddRegion != null)); Debug.Assert((eventAddRegion != null));
Debug.Assert((eventAddRegion.Attributes != null));
Debug.Assert((eventAddRegion.Block != null)); Debug.Assert((eventAddRegion.Block != null));
Debug.Assert((eventAddRegion.Parameters != null)); Debug.Assert((eventAddRegion.Parameters != null));
Debug.Assert((eventAddRegion.Attributes != null)); foreach (AttributeSection o in eventAddRegion.Attributes) {
eventAddRegion.Block.AcceptVisitor(this, data);
foreach (ParameterDeclarationExpression o in eventAddRegion.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (AttributeSection o in eventAddRegion.Attributes) { eventAddRegion.Block.AcceptVisitor(this, data);
foreach (ParameterDeclarationExpression o in eventAddRegion.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
@ -337,43 +334,42 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(EventDeclaration eventDeclaration, object data) { public virtual object Visit(EventDeclaration eventDeclaration, object data) {
Debug.Assert((eventDeclaration != null)); Debug.Assert((eventDeclaration != null));
Debug.Assert((eventDeclaration.Attributes != null));
Debug.Assert((eventDeclaration.Parameters != null));
Debug.Assert((eventDeclaration.TypeReference != null)); Debug.Assert((eventDeclaration.TypeReference != null));
Debug.Assert((eventDeclaration.InterfaceImplementations != null)); Debug.Assert((eventDeclaration.InterfaceImplementations != null));
Debug.Assert((eventDeclaration.AddRegion != null)); Debug.Assert((eventDeclaration.AddRegion != null));
Debug.Assert((eventDeclaration.RemoveRegion != null)); Debug.Assert((eventDeclaration.RemoveRegion != null));
Debug.Assert((eventDeclaration.RaiseRegion != null)); Debug.Assert((eventDeclaration.RaiseRegion != null));
Debug.Assert((eventDeclaration.Parameters != null)); foreach (AttributeSection o in eventDeclaration.Attributes) {
Debug.Assert((eventDeclaration.Attributes != null));
eventDeclaration.TypeReference.AcceptVisitor(this, data);
foreach (InterfaceImplementation o in eventDeclaration.InterfaceImplementations) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
eventDeclaration.AddRegion.AcceptVisitor(this, data);
eventDeclaration.RemoveRegion.AcceptVisitor(this, data);
eventDeclaration.RaiseRegion.AcceptVisitor(this, data);
foreach (ParameterDeclarationExpression o in eventDeclaration.Parameters) { foreach (ParameterDeclarationExpression o in eventDeclaration.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (AttributeSection o in eventDeclaration.Attributes) { eventDeclaration.TypeReference.AcceptVisitor(this, data);
foreach (InterfaceImplementation o in eventDeclaration.InterfaceImplementations) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
return null; eventDeclaration.AddRegion.AcceptVisitor(this, data);
eventDeclaration.RemoveRegion.AcceptVisitor(this, data);
return eventDeclaration.RaiseRegion.AcceptVisitor(this, data);
} }
public virtual object Visit(EventRaiseRegion eventRaiseRegion, object data) { public virtual object Visit(EventRaiseRegion eventRaiseRegion, object data) {
Debug.Assert((eventRaiseRegion != null)); Debug.Assert((eventRaiseRegion != null));
Debug.Assert((eventRaiseRegion.Attributes != null));
Debug.Assert((eventRaiseRegion.Block != null)); Debug.Assert((eventRaiseRegion.Block != null));
Debug.Assert((eventRaiseRegion.Parameters != null)); Debug.Assert((eventRaiseRegion.Parameters != null));
Debug.Assert((eventRaiseRegion.Attributes != null)); foreach (AttributeSection o in eventRaiseRegion.Attributes) {
eventRaiseRegion.Block.AcceptVisitor(this, data);
foreach (ParameterDeclarationExpression o in eventRaiseRegion.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (AttributeSection o in eventRaiseRegion.Attributes) { eventRaiseRegion.Block.AcceptVisitor(this, data);
foreach (ParameterDeclarationExpression o in eventRaiseRegion.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
@ -382,15 +378,15 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(EventRemoveRegion eventRemoveRegion, object data) { public virtual object Visit(EventRemoveRegion eventRemoveRegion, object data) {
Debug.Assert((eventRemoveRegion != null)); Debug.Assert((eventRemoveRegion != null));
Debug.Assert((eventRemoveRegion.Attributes != null));
Debug.Assert((eventRemoveRegion.Block != null)); Debug.Assert((eventRemoveRegion.Block != null));
Debug.Assert((eventRemoveRegion.Parameters != null)); Debug.Assert((eventRemoveRegion.Parameters != null));
Debug.Assert((eventRemoveRegion.Attributes != null)); foreach (AttributeSection o in eventRemoveRegion.Attributes) {
eventRemoveRegion.Block.AcceptVisitor(this, data);
foreach (ParameterDeclarationExpression o in eventRemoveRegion.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (AttributeSection o in eventRemoveRegion.Attributes) { eventRemoveRegion.Block.AcceptVisitor(this, data);
foreach (ParameterDeclarationExpression o in eventRemoveRegion.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
@ -404,15 +400,15 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(FieldDeclaration fieldDeclaration, object data) { public virtual object Visit(FieldDeclaration fieldDeclaration, object data) {
Debug.Assert((fieldDeclaration != null)); Debug.Assert((fieldDeclaration != null));
Debug.Assert((fieldDeclaration.Attributes != null));
Debug.Assert((fieldDeclaration.TypeReference != null)); Debug.Assert((fieldDeclaration.TypeReference != null));
Debug.Assert((fieldDeclaration.Fields != null)); Debug.Assert((fieldDeclaration.Fields != null));
Debug.Assert((fieldDeclaration.Attributes != null)); foreach (AttributeSection o in fieldDeclaration.Attributes) {
fieldDeclaration.TypeReference.AcceptVisitor(this, data);
foreach (VariableDeclaration o in fieldDeclaration.Fields) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (AttributeSection o in fieldDeclaration.Attributes) { fieldDeclaration.TypeReference.AcceptVisitor(this, data);
foreach (VariableDeclaration o in fieldDeclaration.Fields) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
@ -527,12 +523,16 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(IndexerDeclaration indexerDeclaration, object data) { public virtual object Visit(IndexerDeclaration indexerDeclaration, object data) {
Debug.Assert((indexerDeclaration != null)); Debug.Assert((indexerDeclaration != null));
Debug.Assert((indexerDeclaration.Attributes != null));
Debug.Assert((indexerDeclaration.Parameters != null)); Debug.Assert((indexerDeclaration.Parameters != null));
Debug.Assert((indexerDeclaration.InterfaceImplementations != null)); Debug.Assert((indexerDeclaration.InterfaceImplementations != null));
Debug.Assert((indexerDeclaration.TypeReference != null)); Debug.Assert((indexerDeclaration.TypeReference != null));
Debug.Assert((indexerDeclaration.GetRegion != null)); Debug.Assert((indexerDeclaration.GetRegion != null));
Debug.Assert((indexerDeclaration.SetRegion != null)); Debug.Assert((indexerDeclaration.SetRegion != null));
Debug.Assert((indexerDeclaration.Attributes != null)); foreach (AttributeSection o in indexerDeclaration.Attributes) {
Debug.Assert(o != null);
o.AcceptVisitor(this, data);
}
foreach (ParameterDeclarationExpression o in indexerDeclaration.Parameters) { foreach (ParameterDeclarationExpression o in indexerDeclaration.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
@ -543,12 +543,7 @@ namespace ICSharpCode.NRefactory.Parser {
} }
indexerDeclaration.TypeReference.AcceptVisitor(this, data); indexerDeclaration.TypeReference.AcceptVisitor(this, data);
indexerDeclaration.GetRegion.AcceptVisitor(this, data); indexerDeclaration.GetRegion.AcceptVisitor(this, data);
indexerDeclaration.SetRegion.AcceptVisitor(this, data); return indexerDeclaration.SetRegion.AcceptVisitor(this, data);
foreach (AttributeSection o in indexerDeclaration.Attributes) {
Debug.Assert(o != null);
o.AcceptVisitor(this, data);
}
return null;
} }
public virtual object Visit(IndexerExpression indexerExpression, object data) { public virtual object Visit(IndexerExpression indexerExpression, object data) {
@ -618,27 +613,27 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(MethodDeclaration methodDeclaration, object data) { public virtual object Visit(MethodDeclaration methodDeclaration, object data) {
Debug.Assert((methodDeclaration != null)); Debug.Assert((methodDeclaration != null));
Debug.Assert((methodDeclaration.Attributes != null));
Debug.Assert((methodDeclaration.Parameters != null));
Debug.Assert((methodDeclaration.TypeReference != null)); Debug.Assert((methodDeclaration.TypeReference != null));
Debug.Assert((methodDeclaration.Body != null)); Debug.Assert((methodDeclaration.Body != null));
Debug.Assert((methodDeclaration.InterfaceImplementations != null)); Debug.Assert((methodDeclaration.InterfaceImplementations != null));
Debug.Assert((methodDeclaration.Templates != null)); Debug.Assert((methodDeclaration.Templates != null));
Debug.Assert((methodDeclaration.Parameters != null)); foreach (AttributeSection o in methodDeclaration.Attributes) {
Debug.Assert((methodDeclaration.Attributes != null));
methodDeclaration.TypeReference.AcceptVisitor(this, data);
methodDeclaration.Body.AcceptVisitor(this, data);
foreach (InterfaceImplementation o in methodDeclaration.InterfaceImplementations) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (TemplateDefinition o in methodDeclaration.Templates) { foreach (ParameterDeclarationExpression o in methodDeclaration.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (ParameterDeclarationExpression o in methodDeclaration.Parameters) { methodDeclaration.TypeReference.AcceptVisitor(this, data);
methodDeclaration.Body.AcceptVisitor(this, data);
foreach (InterfaceImplementation o in methodDeclaration.InterfaceImplementations) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (AttributeSection o in methodDeclaration.Attributes) { foreach (TemplateDefinition o in methodDeclaration.Templates) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
@ -676,14 +671,18 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(OperatorDeclaration operatorDeclaration, object data) { public virtual object Visit(OperatorDeclaration operatorDeclaration, object data) {
Debug.Assert((operatorDeclaration != null)); Debug.Assert((operatorDeclaration != null));
Debug.Assert((operatorDeclaration.ReturnTypeAttributes != null)); Debug.Assert((operatorDeclaration.Attributes != null));
Debug.Assert((operatorDeclaration.Parameters != null));
Debug.Assert((operatorDeclaration.TypeReference != null)); Debug.Assert((operatorDeclaration.TypeReference != null));
Debug.Assert((operatorDeclaration.Body != null)); Debug.Assert((operatorDeclaration.Body != null));
Debug.Assert((operatorDeclaration.InterfaceImplementations != null)); Debug.Assert((operatorDeclaration.InterfaceImplementations != null));
Debug.Assert((operatorDeclaration.Templates != null)); Debug.Assert((operatorDeclaration.Templates != null));
Debug.Assert((operatorDeclaration.Parameters != null)); Debug.Assert((operatorDeclaration.ReturnTypeAttributes != null));
Debug.Assert((operatorDeclaration.Attributes != null)); foreach (AttributeSection o in operatorDeclaration.Attributes) {
foreach (AttributeSection o in operatorDeclaration.ReturnTypeAttributes) { Debug.Assert(o != null);
o.AcceptVisitor(this, data);
}
foreach (ParameterDeclarationExpression o in operatorDeclaration.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
@ -697,11 +696,7 @@ namespace ICSharpCode.NRefactory.Parser {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (ParameterDeclarationExpression o in operatorDeclaration.Parameters) { foreach (AttributeSection o in operatorDeclaration.ReturnTypeAttributes) {
Debug.Assert(o != null);
o.AcceptVisitor(this, data);
}
foreach (AttributeSection o in operatorDeclaration.Attributes) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
@ -745,53 +740,51 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(PropertyDeclaration propertyDeclaration, object data) { public virtual object Visit(PropertyDeclaration propertyDeclaration, object data) {
Debug.Assert((propertyDeclaration != null)); Debug.Assert((propertyDeclaration != null));
Debug.Assert((propertyDeclaration.Attributes != null));
Debug.Assert((propertyDeclaration.Parameters != null));
Debug.Assert((propertyDeclaration.InterfaceImplementations != null)); Debug.Assert((propertyDeclaration.InterfaceImplementations != null));
Debug.Assert((propertyDeclaration.TypeReference != null)); Debug.Assert((propertyDeclaration.TypeReference != null));
Debug.Assert((propertyDeclaration.GetRegion != null)); Debug.Assert((propertyDeclaration.GetRegion != null));
Debug.Assert((propertyDeclaration.SetRegion != null)); Debug.Assert((propertyDeclaration.SetRegion != null));
Debug.Assert((propertyDeclaration.Parameters != null)); foreach (AttributeSection o in propertyDeclaration.Attributes) {
Debug.Assert((propertyDeclaration.Attributes != null));
foreach (InterfaceImplementation o in propertyDeclaration.InterfaceImplementations) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
propertyDeclaration.TypeReference.AcceptVisitor(this, data);
propertyDeclaration.GetRegion.AcceptVisitor(this, data);
propertyDeclaration.SetRegion.AcceptVisitor(this, data);
foreach (ParameterDeclarationExpression o in propertyDeclaration.Parameters) { foreach (ParameterDeclarationExpression o in propertyDeclaration.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (AttributeSection o in propertyDeclaration.Attributes) { foreach (InterfaceImplementation o in propertyDeclaration.InterfaceImplementations) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
return null; propertyDeclaration.TypeReference.AcceptVisitor(this, data);
propertyDeclaration.GetRegion.AcceptVisitor(this, data);
return propertyDeclaration.SetRegion.AcceptVisitor(this, data);
} }
public virtual object Visit(PropertyGetRegion propertyGetRegion, object data) { public virtual object Visit(PropertyGetRegion propertyGetRegion, object data) {
Debug.Assert((propertyGetRegion != null)); Debug.Assert((propertyGetRegion != null));
Debug.Assert((propertyGetRegion.Block != null));
Debug.Assert((propertyGetRegion.Attributes != null)); Debug.Assert((propertyGetRegion.Attributes != null));
propertyGetRegion.Block.AcceptVisitor(this, data); Debug.Assert((propertyGetRegion.Block != null));
foreach (AttributeSection o in propertyGetRegion.Attributes) { foreach (AttributeSection o in propertyGetRegion.Attributes) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
return null; return propertyGetRegion.Block.AcceptVisitor(this, data);
} }
public virtual object Visit(PropertySetRegion propertySetRegion, object data) { public virtual object Visit(PropertySetRegion propertySetRegion, object data) {
Debug.Assert((propertySetRegion != null)); Debug.Assert((propertySetRegion != null));
Debug.Assert((propertySetRegion.Parameters != null));
Debug.Assert((propertySetRegion.Block != null));
Debug.Assert((propertySetRegion.Attributes != null)); Debug.Assert((propertySetRegion.Attributes != null));
foreach (ParameterDeclarationExpression o in propertySetRegion.Parameters) { Debug.Assert((propertySetRegion.Block != null));
Debug.Assert((propertySetRegion.Parameters != null));
foreach (AttributeSection o in propertySetRegion.Attributes) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
propertySetRegion.Block.AcceptVisitor(this, data); propertySetRegion.Block.AcceptVisitor(this, data);
foreach (AttributeSection o in propertySetRegion.Attributes) { foreach (ParameterDeclarationExpression o in propertySetRegion.Parameters) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
@ -886,13 +879,13 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(TemplateDefinition templateDefinition, object data) { public virtual object Visit(TemplateDefinition templateDefinition, object data) {
Debug.Assert((templateDefinition != null)); Debug.Assert((templateDefinition != null));
Debug.Assert((templateDefinition.Bases != null));
Debug.Assert((templateDefinition.Attributes != null)); Debug.Assert((templateDefinition.Attributes != null));
foreach (TypeReference o in templateDefinition.Bases) { Debug.Assert((templateDefinition.Bases != null));
foreach (AttributeSection o in templateDefinition.Attributes) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (AttributeSection o in templateDefinition.Attributes) { foreach (TypeReference o in templateDefinition.Bases) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
@ -925,18 +918,18 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(TypeDeclaration typeDeclaration, object data) { public virtual object Visit(TypeDeclaration typeDeclaration, object data) {
Debug.Assert((typeDeclaration != null)); Debug.Assert((typeDeclaration != null));
Debug.Assert((typeDeclaration.Attributes != null));
Debug.Assert((typeDeclaration.BaseTypes != null)); Debug.Assert((typeDeclaration.BaseTypes != null));
Debug.Assert((typeDeclaration.Templates != null)); Debug.Assert((typeDeclaration.Templates != null));
Debug.Assert((typeDeclaration.Attributes != null)); foreach (AttributeSection o in typeDeclaration.Attributes) {
foreach (TypeReference o in typeDeclaration.BaseTypes) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (TemplateDefinition o in typeDeclaration.Templates) { foreach (TypeReference o in typeDeclaration.BaseTypes) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }
foreach (AttributeSection o in typeDeclaration.Attributes) { foreach (TemplateDefinition o in typeDeclaration.Templates) {
Debug.Assert(o != null); Debug.Assert(o != null);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
} }

478
src/Libraries/NRefactory/Project/Src/Parser/Visitors/AbstractAstTransformer.cs

@ -322,38 +322,38 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(ConstructorDeclaration constructorDeclaration, object data) { public virtual object Visit(ConstructorDeclaration constructorDeclaration, object data) {
Debug.Assert((constructorDeclaration != null)); Debug.Assert((constructorDeclaration != null));
Debug.Assert((constructorDeclaration.Attributes != null));
Debug.Assert((constructorDeclaration.Parameters != null));
Debug.Assert((constructorDeclaration.ConstructorInitializer != null)); Debug.Assert((constructorDeclaration.ConstructorInitializer != null));
Debug.Assert((constructorDeclaration.Body != null)); Debug.Assert((constructorDeclaration.Body != null));
Debug.Assert((constructorDeclaration.Parameters != null)); for (int i = 0; i < constructorDeclaration.Attributes.Count; i++) {
Debug.Assert((constructorDeclaration.Attributes != null)); AttributeSection o = constructorDeclaration.Attributes[i];
nodeStack.Push(constructorDeclaration.ConstructorInitializer);
constructorDeclaration.ConstructorInitializer.AcceptVisitor(this, data);
constructorDeclaration.ConstructorInitializer = ((ConstructorInitializer)(nodeStack.Pop()));
nodeStack.Push(constructorDeclaration.Body);
constructorDeclaration.Body.AcceptVisitor(this, data);
constructorDeclaration.Body = ((BlockStatement)(nodeStack.Pop()));
for (int i = 0; i < constructorDeclaration.Parameters.Count; i++) {
ParameterDeclarationExpression o = constructorDeclaration.Parameters[i];
Debug.Assert(o != null); Debug.Assert(o != null);
nodeStack.Push(o); nodeStack.Push(o);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
o = (ParameterDeclarationExpression)nodeStack.Pop(); o = (AttributeSection)nodeStack.Pop();
if (o == null) if (o == null)
constructorDeclaration.Parameters.RemoveAt(i--); constructorDeclaration.Attributes.RemoveAt(i--);
else else
constructorDeclaration.Parameters[i] = o; constructorDeclaration.Attributes[i] = o;
} }
for (int i = 0; i < constructorDeclaration.Attributes.Count; i++) { for (int i = 0; i < constructorDeclaration.Parameters.Count; i++) {
AttributeSection o = constructorDeclaration.Attributes[i]; ParameterDeclarationExpression o = constructorDeclaration.Parameters[i];
Debug.Assert(o != null); Debug.Assert(o != null);
nodeStack.Push(o); nodeStack.Push(o);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop(); o = (ParameterDeclarationExpression)nodeStack.Pop();
if (o == null) if (o == null)
constructorDeclaration.Attributes.RemoveAt(i--); constructorDeclaration.Parameters.RemoveAt(i--);
else else
constructorDeclaration.Attributes[i] = o; constructorDeclaration.Parameters[i] = o;
} }
nodeStack.Push(constructorDeclaration.ConstructorInitializer);
constructorDeclaration.ConstructorInitializer.AcceptVisitor(this, data);
constructorDeclaration.ConstructorInitializer = ((ConstructorInitializer)(nodeStack.Pop()));
nodeStack.Push(constructorDeclaration.Body);
constructorDeclaration.Body.AcceptVisitor(this, data);
constructorDeclaration.Body = ((BlockStatement)(nodeStack.Pop()));
return null; return null;
} }
@ -381,34 +381,34 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(DeclareDeclaration declareDeclaration, object data) { public virtual object Visit(DeclareDeclaration declareDeclaration, object data) {
Debug.Assert((declareDeclaration != null)); Debug.Assert((declareDeclaration != null));
Debug.Assert((declareDeclaration.TypeReference != null));
Debug.Assert((declareDeclaration.Parameters != null));
Debug.Assert((declareDeclaration.Attributes != null)); Debug.Assert((declareDeclaration.Attributes != null));
nodeStack.Push(declareDeclaration.TypeReference); Debug.Assert((declareDeclaration.Parameters != null));
declareDeclaration.TypeReference.AcceptVisitor(this, data); Debug.Assert((declareDeclaration.TypeReference != null));
declareDeclaration.TypeReference = ((TypeReference)(nodeStack.Pop())); for (int i = 0; i < declareDeclaration.Attributes.Count; i++) {
for (int i = 0; i < declareDeclaration.Parameters.Count; i++) { AttributeSection o = declareDeclaration.Attributes[i];
ParameterDeclarationExpression o = declareDeclaration.Parameters[i];
Debug.Assert(o != null); Debug.Assert(o != null);
nodeStack.Push(o); nodeStack.Push(o);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
o = (ParameterDeclarationExpression)nodeStack.Pop(); o = (AttributeSection)nodeStack.Pop();
if (o == null) if (o == null)
declareDeclaration.Parameters.RemoveAt(i--); declareDeclaration.Attributes.RemoveAt(i--);
else else
declareDeclaration.Parameters[i] = o; declareDeclaration.Attributes[i] = o;
} }
for (int i = 0; i < declareDeclaration.Attributes.Count; i++) { for (int i = 0; i < declareDeclaration.Parameters.Count; i++) {
AttributeSection o = declareDeclaration.Attributes[i]; ParameterDeclarationExpression o = declareDeclaration.Parameters[i];
Debug.Assert(o != null); Debug.Assert(o != null);
nodeStack.Push(o); nodeStack.Push(o);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop(); o = (ParameterDeclarationExpression)nodeStack.Pop();
if (o == null) if (o == null)
declareDeclaration.Attributes.RemoveAt(i--); declareDeclaration.Parameters.RemoveAt(i--);
else else
declareDeclaration.Attributes[i] = o; declareDeclaration.Parameters[i] = o;
} }
nodeStack.Push(declareDeclaration.TypeReference);
declareDeclaration.TypeReference.AcceptVisitor(this, data);
declareDeclaration.TypeReference = ((TypeReference)(nodeStack.Pop()));
return null; return null;
} }
@ -423,10 +423,21 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(DelegateDeclaration delegateDeclaration, object data) { public virtual object Visit(DelegateDeclaration delegateDeclaration, object data) {
Debug.Assert((delegateDeclaration != null)); Debug.Assert((delegateDeclaration != null));
Debug.Assert((delegateDeclaration.Attributes != null));
Debug.Assert((delegateDeclaration.ReturnType != null)); Debug.Assert((delegateDeclaration.ReturnType != null));
Debug.Assert((delegateDeclaration.Parameters != null)); Debug.Assert((delegateDeclaration.Parameters != null));
Debug.Assert((delegateDeclaration.Templates != null)); Debug.Assert((delegateDeclaration.Templates != null));
Debug.Assert((delegateDeclaration.Attributes != null)); for (int i = 0; i < delegateDeclaration.Attributes.Count; i++) {
AttributeSection o = delegateDeclaration.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
delegateDeclaration.Attributes.RemoveAt(i--);
else
delegateDeclaration.Attributes[i] = o;
}
nodeStack.Push(delegateDeclaration.ReturnType); nodeStack.Push(delegateDeclaration.ReturnType);
delegateDeclaration.ReturnType.AcceptVisitor(this, data); delegateDeclaration.ReturnType.AcceptVisitor(this, data);
delegateDeclaration.ReturnType = ((TypeReference)(nodeStack.Pop())); delegateDeclaration.ReturnType = ((TypeReference)(nodeStack.Pop()));
@ -452,27 +463,13 @@ namespace ICSharpCode.NRefactory.Parser {
else else
delegateDeclaration.Templates[i] = o; delegateDeclaration.Templates[i] = o;
} }
for (int i = 0; i < delegateDeclaration.Attributes.Count; i++) {
AttributeSection o = delegateDeclaration.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
delegateDeclaration.Attributes.RemoveAt(i--);
else
delegateDeclaration.Attributes[i] = o;
}
return null; return null;
} }
public virtual object Visit(DestructorDeclaration destructorDeclaration, object data) { public virtual object Visit(DestructorDeclaration destructorDeclaration, object data) {
Debug.Assert((destructorDeclaration != null)); Debug.Assert((destructorDeclaration != null));
Debug.Assert((destructorDeclaration.Body != null));
Debug.Assert((destructorDeclaration.Attributes != null)); Debug.Assert((destructorDeclaration.Attributes != null));
nodeStack.Push(destructorDeclaration.Body); Debug.Assert((destructorDeclaration.Body != null));
destructorDeclaration.Body.AcceptVisitor(this, data);
destructorDeclaration.Body = ((BlockStatement)(nodeStack.Pop()));
for (int i = 0; i < destructorDeclaration.Attributes.Count; i++) { for (int i = 0; i < destructorDeclaration.Attributes.Count; i++) {
AttributeSection o = destructorDeclaration.Attributes[i]; AttributeSection o = destructorDeclaration.Attributes[i];
Debug.Assert(o != null); Debug.Assert(o != null);
@ -484,6 +481,9 @@ namespace ICSharpCode.NRefactory.Parser {
else else
destructorDeclaration.Attributes[i] = o; destructorDeclaration.Attributes[i] = o;
} }
nodeStack.Push(destructorDeclaration.Body);
destructorDeclaration.Body.AcceptVisitor(this, data);
destructorDeclaration.Body = ((BlockStatement)(nodeStack.Pop()));
return null; return null;
} }
@ -560,9 +560,20 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(EventAddRegion eventAddRegion, object data) { public virtual object Visit(EventAddRegion eventAddRegion, object data) {
Debug.Assert((eventAddRegion != null)); Debug.Assert((eventAddRegion != null));
Debug.Assert((eventAddRegion.Attributes != null));
Debug.Assert((eventAddRegion.Block != null)); Debug.Assert((eventAddRegion.Block != null));
Debug.Assert((eventAddRegion.Parameters != null)); Debug.Assert((eventAddRegion.Parameters != null));
Debug.Assert((eventAddRegion.Attributes != null)); for (int i = 0; i < eventAddRegion.Attributes.Count; i++) {
AttributeSection o = eventAddRegion.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
eventAddRegion.Attributes.RemoveAt(i--);
else
eventAddRegion.Attributes[i] = o;
}
nodeStack.Push(eventAddRegion.Block); nodeStack.Push(eventAddRegion.Block);
eventAddRegion.Block.AcceptVisitor(this, data); eventAddRegion.Block.AcceptVisitor(this, data);
eventAddRegion.Block = ((BlockStatement)(nodeStack.Pop())); eventAddRegion.Block = ((BlockStatement)(nodeStack.Pop()));
@ -577,52 +588,29 @@ namespace ICSharpCode.NRefactory.Parser {
else else
eventAddRegion.Parameters[i] = o; eventAddRegion.Parameters[i] = o;
} }
for (int i = 0; i < eventAddRegion.Attributes.Count; i++) {
AttributeSection o = eventAddRegion.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
eventAddRegion.Attributes.RemoveAt(i--);
else
eventAddRegion.Attributes[i] = o;
}
return null; return null;
} }
public virtual object Visit(EventDeclaration eventDeclaration, object data) { public virtual object Visit(EventDeclaration eventDeclaration, object data) {
Debug.Assert((eventDeclaration != null)); Debug.Assert((eventDeclaration != null));
Debug.Assert((eventDeclaration.Attributes != null));
Debug.Assert((eventDeclaration.Parameters != null));
Debug.Assert((eventDeclaration.TypeReference != null)); Debug.Assert((eventDeclaration.TypeReference != null));
Debug.Assert((eventDeclaration.InterfaceImplementations != null)); Debug.Assert((eventDeclaration.InterfaceImplementations != null));
Debug.Assert((eventDeclaration.AddRegion != null)); Debug.Assert((eventDeclaration.AddRegion != null));
Debug.Assert((eventDeclaration.RemoveRegion != null)); Debug.Assert((eventDeclaration.RemoveRegion != null));
Debug.Assert((eventDeclaration.RaiseRegion != null)); Debug.Assert((eventDeclaration.RaiseRegion != null));
Debug.Assert((eventDeclaration.Parameters != null)); for (int i = 0; i < eventDeclaration.Attributes.Count; i++) {
Debug.Assert((eventDeclaration.Attributes != null)); AttributeSection o = eventDeclaration.Attributes[i];
nodeStack.Push(eventDeclaration.TypeReference);
eventDeclaration.TypeReference.AcceptVisitor(this, data);
eventDeclaration.TypeReference = ((TypeReference)(nodeStack.Pop()));
for (int i = 0; i < eventDeclaration.InterfaceImplementations.Count; i++) {
InterfaceImplementation o = eventDeclaration.InterfaceImplementations[i];
Debug.Assert(o != null); Debug.Assert(o != null);
nodeStack.Push(o); nodeStack.Push(o);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
o = (InterfaceImplementation)nodeStack.Pop(); o = (AttributeSection)nodeStack.Pop();
if (o == null) if (o == null)
eventDeclaration.InterfaceImplementations.RemoveAt(i--); eventDeclaration.Attributes.RemoveAt(i--);
else else
eventDeclaration.InterfaceImplementations[i] = o; eventDeclaration.Attributes[i] = o;
} }
nodeStack.Push(eventDeclaration.AddRegion);
eventDeclaration.AddRegion.AcceptVisitor(this, data);
eventDeclaration.AddRegion = ((EventAddRegion)(nodeStack.Pop()));
nodeStack.Push(eventDeclaration.RemoveRegion);
eventDeclaration.RemoveRegion.AcceptVisitor(this, data);
eventDeclaration.RemoveRegion = ((EventRemoveRegion)(nodeStack.Pop()));
nodeStack.Push(eventDeclaration.RaiseRegion);
eventDeclaration.RaiseRegion.AcceptVisitor(this, data);
eventDeclaration.RaiseRegion = ((EventRaiseRegion)(nodeStack.Pop()));
for (int i = 0; i < eventDeclaration.Parameters.Count; i++) { for (int i = 0; i < eventDeclaration.Parameters.Count; i++) {
ParameterDeclarationExpression o = eventDeclaration.Parameters[i]; ParameterDeclarationExpression o = eventDeclaration.Parameters[i];
Debug.Assert(o != null); Debug.Assert(o != null);
@ -634,25 +622,48 @@ namespace ICSharpCode.NRefactory.Parser {
else else
eventDeclaration.Parameters[i] = o; eventDeclaration.Parameters[i] = o;
} }
for (int i = 0; i < eventDeclaration.Attributes.Count; i++) { nodeStack.Push(eventDeclaration.TypeReference);
AttributeSection o = eventDeclaration.Attributes[i]; eventDeclaration.TypeReference.AcceptVisitor(this, data);
eventDeclaration.TypeReference = ((TypeReference)(nodeStack.Pop()));
for (int i = 0; i < eventDeclaration.InterfaceImplementations.Count; i++) {
InterfaceImplementation o = eventDeclaration.InterfaceImplementations[i];
Debug.Assert(o != null); Debug.Assert(o != null);
nodeStack.Push(o); nodeStack.Push(o);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop(); o = (InterfaceImplementation)nodeStack.Pop();
if (o == null) if (o == null)
eventDeclaration.Attributes.RemoveAt(i--); eventDeclaration.InterfaceImplementations.RemoveAt(i--);
else else
eventDeclaration.Attributes[i] = o; eventDeclaration.InterfaceImplementations[i] = o;
} }
nodeStack.Push(eventDeclaration.AddRegion);
eventDeclaration.AddRegion.AcceptVisitor(this, data);
eventDeclaration.AddRegion = ((EventAddRegion)(nodeStack.Pop()));
nodeStack.Push(eventDeclaration.RemoveRegion);
eventDeclaration.RemoveRegion.AcceptVisitor(this, data);
eventDeclaration.RemoveRegion = ((EventRemoveRegion)(nodeStack.Pop()));
nodeStack.Push(eventDeclaration.RaiseRegion);
eventDeclaration.RaiseRegion.AcceptVisitor(this, data);
eventDeclaration.RaiseRegion = ((EventRaiseRegion)(nodeStack.Pop()));
return null; return null;
} }
public virtual object Visit(EventRaiseRegion eventRaiseRegion, object data) { public virtual object Visit(EventRaiseRegion eventRaiseRegion, object data) {
Debug.Assert((eventRaiseRegion != null)); Debug.Assert((eventRaiseRegion != null));
Debug.Assert((eventRaiseRegion.Attributes != null));
Debug.Assert((eventRaiseRegion.Block != null)); Debug.Assert((eventRaiseRegion.Block != null));
Debug.Assert((eventRaiseRegion.Parameters != null)); Debug.Assert((eventRaiseRegion.Parameters != null));
Debug.Assert((eventRaiseRegion.Attributes != null)); for (int i = 0; i < eventRaiseRegion.Attributes.Count; i++) {
AttributeSection o = eventRaiseRegion.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
eventRaiseRegion.Attributes.RemoveAt(i--);
else
eventRaiseRegion.Attributes[i] = o;
}
nodeStack.Push(eventRaiseRegion.Block); nodeStack.Push(eventRaiseRegion.Block);
eventRaiseRegion.Block.AcceptVisitor(this, data); eventRaiseRegion.Block.AcceptVisitor(this, data);
eventRaiseRegion.Block = ((BlockStatement)(nodeStack.Pop())); eventRaiseRegion.Block = ((BlockStatement)(nodeStack.Pop()));
@ -667,25 +678,25 @@ namespace ICSharpCode.NRefactory.Parser {
else else
eventRaiseRegion.Parameters[i] = o; eventRaiseRegion.Parameters[i] = o;
} }
for (int i = 0; i < eventRaiseRegion.Attributes.Count; i++) {
AttributeSection o = eventRaiseRegion.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
eventRaiseRegion.Attributes.RemoveAt(i--);
else
eventRaiseRegion.Attributes[i] = o;
}
return null; return null;
} }
public virtual object Visit(EventRemoveRegion eventRemoveRegion, object data) { public virtual object Visit(EventRemoveRegion eventRemoveRegion, object data) {
Debug.Assert((eventRemoveRegion != null)); Debug.Assert((eventRemoveRegion != null));
Debug.Assert((eventRemoveRegion.Attributes != null));
Debug.Assert((eventRemoveRegion.Block != null)); Debug.Assert((eventRemoveRegion.Block != null));
Debug.Assert((eventRemoveRegion.Parameters != null)); Debug.Assert((eventRemoveRegion.Parameters != null));
Debug.Assert((eventRemoveRegion.Attributes != null)); for (int i = 0; i < eventRemoveRegion.Attributes.Count; i++) {
AttributeSection o = eventRemoveRegion.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
eventRemoveRegion.Attributes.RemoveAt(i--);
else
eventRemoveRegion.Attributes[i] = o;
}
nodeStack.Push(eventRemoveRegion.Block); nodeStack.Push(eventRemoveRegion.Block);
eventRemoveRegion.Block.AcceptVisitor(this, data); eventRemoveRegion.Block.AcceptVisitor(this, data);
eventRemoveRegion.Block = ((BlockStatement)(nodeStack.Pop())); eventRemoveRegion.Block = ((BlockStatement)(nodeStack.Pop()));
@ -700,17 +711,6 @@ namespace ICSharpCode.NRefactory.Parser {
else else
eventRemoveRegion.Parameters[i] = o; eventRemoveRegion.Parameters[i] = o;
} }
for (int i = 0; i < eventRemoveRegion.Attributes.Count; i++) {
AttributeSection o = eventRemoveRegion.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
eventRemoveRegion.Attributes.RemoveAt(i--);
else
eventRemoveRegion.Attributes[i] = o;
}
return null; return null;
} }
@ -721,9 +721,20 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(FieldDeclaration fieldDeclaration, object data) { public virtual object Visit(FieldDeclaration fieldDeclaration, object data) {
Debug.Assert((fieldDeclaration != null)); Debug.Assert((fieldDeclaration != null));
Debug.Assert((fieldDeclaration.Attributes != null));
Debug.Assert((fieldDeclaration.TypeReference != null)); Debug.Assert((fieldDeclaration.TypeReference != null));
Debug.Assert((fieldDeclaration.Fields != null)); Debug.Assert((fieldDeclaration.Fields != null));
Debug.Assert((fieldDeclaration.Attributes != null)); for (int i = 0; i < fieldDeclaration.Attributes.Count; i++) {
AttributeSection o = fieldDeclaration.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
fieldDeclaration.Attributes.RemoveAt(i--);
else
fieldDeclaration.Attributes[i] = o;
}
nodeStack.Push(fieldDeclaration.TypeReference); nodeStack.Push(fieldDeclaration.TypeReference);
fieldDeclaration.TypeReference.AcceptVisitor(this, data); fieldDeclaration.TypeReference.AcceptVisitor(this, data);
fieldDeclaration.TypeReference = ((TypeReference)(nodeStack.Pop())); fieldDeclaration.TypeReference = ((TypeReference)(nodeStack.Pop()));
@ -738,17 +749,6 @@ namespace ICSharpCode.NRefactory.Parser {
else else
fieldDeclaration.Fields[i] = o; fieldDeclaration.Fields[i] = o;
} }
for (int i = 0; i < fieldDeclaration.Attributes.Count; i++) {
AttributeSection o = fieldDeclaration.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
fieldDeclaration.Attributes.RemoveAt(i--);
else
fieldDeclaration.Attributes[i] = o;
}
return null; return null;
} }
@ -947,12 +947,23 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(IndexerDeclaration indexerDeclaration, object data) { public virtual object Visit(IndexerDeclaration indexerDeclaration, object data) {
Debug.Assert((indexerDeclaration != null)); Debug.Assert((indexerDeclaration != null));
Debug.Assert((indexerDeclaration.Attributes != null));
Debug.Assert((indexerDeclaration.Parameters != null)); Debug.Assert((indexerDeclaration.Parameters != null));
Debug.Assert((indexerDeclaration.InterfaceImplementations != null)); Debug.Assert((indexerDeclaration.InterfaceImplementations != null));
Debug.Assert((indexerDeclaration.TypeReference != null)); Debug.Assert((indexerDeclaration.TypeReference != null));
Debug.Assert((indexerDeclaration.GetRegion != null)); Debug.Assert((indexerDeclaration.GetRegion != null));
Debug.Assert((indexerDeclaration.SetRegion != null)); Debug.Assert((indexerDeclaration.SetRegion != null));
Debug.Assert((indexerDeclaration.Attributes != null)); for (int i = 0; i < indexerDeclaration.Attributes.Count; i++) {
AttributeSection o = indexerDeclaration.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
indexerDeclaration.Attributes.RemoveAt(i--);
else
indexerDeclaration.Attributes[i] = o;
}
for (int i = 0; i < indexerDeclaration.Parameters.Count; i++) { for (int i = 0; i < indexerDeclaration.Parameters.Count; i++) {
ParameterDeclarationExpression o = indexerDeclaration.Parameters[i]; ParameterDeclarationExpression o = indexerDeclaration.Parameters[i];
Debug.Assert(o != null); Debug.Assert(o != null);
@ -984,17 +995,6 @@ namespace ICSharpCode.NRefactory.Parser {
nodeStack.Push(indexerDeclaration.SetRegion); nodeStack.Push(indexerDeclaration.SetRegion);
indexerDeclaration.SetRegion.AcceptVisitor(this, data); indexerDeclaration.SetRegion.AcceptVisitor(this, data);
indexerDeclaration.SetRegion = ((PropertySetRegion)(nodeStack.Pop())); indexerDeclaration.SetRegion = ((PropertySetRegion)(nodeStack.Pop()));
for (int i = 0; i < indexerDeclaration.Attributes.Count; i++) {
AttributeSection o = indexerDeclaration.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
indexerDeclaration.Attributes.RemoveAt(i--);
else
indexerDeclaration.Attributes[i] = o;
}
return null; return null;
} }
@ -1107,12 +1107,34 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(MethodDeclaration methodDeclaration, object data) { public virtual object Visit(MethodDeclaration methodDeclaration, object data) {
Debug.Assert((methodDeclaration != null)); Debug.Assert((methodDeclaration != null));
Debug.Assert((methodDeclaration.Attributes != null));
Debug.Assert((methodDeclaration.Parameters != null));
Debug.Assert((methodDeclaration.TypeReference != null)); Debug.Assert((methodDeclaration.TypeReference != null));
Debug.Assert((methodDeclaration.Body != null)); Debug.Assert((methodDeclaration.Body != null));
Debug.Assert((methodDeclaration.InterfaceImplementations != null)); Debug.Assert((methodDeclaration.InterfaceImplementations != null));
Debug.Assert((methodDeclaration.Templates != null)); Debug.Assert((methodDeclaration.Templates != null));
Debug.Assert((methodDeclaration.Parameters != null)); for (int i = 0; i < methodDeclaration.Attributes.Count; i++) {
Debug.Assert((methodDeclaration.Attributes != null)); AttributeSection o = methodDeclaration.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
methodDeclaration.Attributes.RemoveAt(i--);
else
methodDeclaration.Attributes[i] = o;
}
for (int i = 0; i < methodDeclaration.Parameters.Count; i++) {
ParameterDeclarationExpression o = methodDeclaration.Parameters[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (ParameterDeclarationExpression)nodeStack.Pop();
if (o == null)
methodDeclaration.Parameters.RemoveAt(i--);
else
methodDeclaration.Parameters[i] = o;
}
nodeStack.Push(methodDeclaration.TypeReference); nodeStack.Push(methodDeclaration.TypeReference);
methodDeclaration.TypeReference.AcceptVisitor(this, data); methodDeclaration.TypeReference.AcceptVisitor(this, data);
methodDeclaration.TypeReference = ((TypeReference)(nodeStack.Pop())); methodDeclaration.TypeReference = ((TypeReference)(nodeStack.Pop()));
@ -1141,28 +1163,6 @@ namespace ICSharpCode.NRefactory.Parser {
else else
methodDeclaration.Templates[i] = o; methodDeclaration.Templates[i] = o;
} }
for (int i = 0; i < methodDeclaration.Parameters.Count; i++) {
ParameterDeclarationExpression o = methodDeclaration.Parameters[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (ParameterDeclarationExpression)nodeStack.Pop();
if (o == null)
methodDeclaration.Parameters.RemoveAt(i--);
else
methodDeclaration.Parameters[i] = o;
}
for (int i = 0; i < methodDeclaration.Attributes.Count; i++) {
AttributeSection o = methodDeclaration.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
methodDeclaration.Attributes.RemoveAt(i--);
else
methodDeclaration.Attributes[i] = o;
}
return null; return null;
} }
@ -1223,23 +1223,34 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(OperatorDeclaration operatorDeclaration, object data) { public virtual object Visit(OperatorDeclaration operatorDeclaration, object data) {
Debug.Assert((operatorDeclaration != null)); Debug.Assert((operatorDeclaration != null));
Debug.Assert((operatorDeclaration.ReturnTypeAttributes != null)); Debug.Assert((operatorDeclaration.Attributes != null));
Debug.Assert((operatorDeclaration.Parameters != null));
Debug.Assert((operatorDeclaration.TypeReference != null)); Debug.Assert((operatorDeclaration.TypeReference != null));
Debug.Assert((operatorDeclaration.Body != null)); Debug.Assert((operatorDeclaration.Body != null));
Debug.Assert((operatorDeclaration.InterfaceImplementations != null)); Debug.Assert((operatorDeclaration.InterfaceImplementations != null));
Debug.Assert((operatorDeclaration.Templates != null)); Debug.Assert((operatorDeclaration.Templates != null));
Debug.Assert((operatorDeclaration.Parameters != null)); Debug.Assert((operatorDeclaration.ReturnTypeAttributes != null));
Debug.Assert((operatorDeclaration.Attributes != null)); for (int i = 0; i < operatorDeclaration.Attributes.Count; i++) {
for (int i = 0; i < operatorDeclaration.ReturnTypeAttributes.Count; i++) { AttributeSection o = operatorDeclaration.Attributes[i];
AttributeSection o = operatorDeclaration.ReturnTypeAttributes[i];
Debug.Assert(o != null); Debug.Assert(o != null);
nodeStack.Push(o); nodeStack.Push(o);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop(); o = (AttributeSection)nodeStack.Pop();
if (o == null) if (o == null)
operatorDeclaration.ReturnTypeAttributes.RemoveAt(i--); operatorDeclaration.Attributes.RemoveAt(i--);
else else
operatorDeclaration.ReturnTypeAttributes[i] = o; operatorDeclaration.Attributes[i] = o;
}
for (int i = 0; i < operatorDeclaration.Parameters.Count; i++) {
ParameterDeclarationExpression o = operatorDeclaration.Parameters[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (ParameterDeclarationExpression)nodeStack.Pop();
if (o == null)
operatorDeclaration.Parameters.RemoveAt(i--);
else
operatorDeclaration.Parameters[i] = o;
} }
nodeStack.Push(operatorDeclaration.TypeReference); nodeStack.Push(operatorDeclaration.TypeReference);
operatorDeclaration.TypeReference.AcceptVisitor(this, data); operatorDeclaration.TypeReference.AcceptVisitor(this, data);
@ -1269,27 +1280,16 @@ namespace ICSharpCode.NRefactory.Parser {
else else
operatorDeclaration.Templates[i] = o; operatorDeclaration.Templates[i] = o;
} }
for (int i = 0; i < operatorDeclaration.Parameters.Count; i++) { for (int i = 0; i < operatorDeclaration.ReturnTypeAttributes.Count; i++) {
ParameterDeclarationExpression o = operatorDeclaration.Parameters[i]; AttributeSection o = operatorDeclaration.ReturnTypeAttributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (ParameterDeclarationExpression)nodeStack.Pop();
if (o == null)
operatorDeclaration.Parameters.RemoveAt(i--);
else
operatorDeclaration.Parameters[i] = o;
}
for (int i = 0; i < operatorDeclaration.Attributes.Count; i++) {
AttributeSection o = operatorDeclaration.Attributes[i];
Debug.Assert(o != null); Debug.Assert(o != null);
nodeStack.Push(o); nodeStack.Push(o);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop(); o = (AttributeSection)nodeStack.Pop();
if (o == null) if (o == null)
operatorDeclaration.Attributes.RemoveAt(i--); operatorDeclaration.ReturnTypeAttributes.RemoveAt(i--);
else else
operatorDeclaration.Attributes[i] = o; operatorDeclaration.ReturnTypeAttributes[i] = o;
} }
return null; return null;
} }
@ -1349,32 +1349,23 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(PropertyDeclaration propertyDeclaration, object data) { public virtual object Visit(PropertyDeclaration propertyDeclaration, object data) {
Debug.Assert((propertyDeclaration != null)); Debug.Assert((propertyDeclaration != null));
Debug.Assert((propertyDeclaration.Attributes != null));
Debug.Assert((propertyDeclaration.Parameters != null));
Debug.Assert((propertyDeclaration.InterfaceImplementations != null)); Debug.Assert((propertyDeclaration.InterfaceImplementations != null));
Debug.Assert((propertyDeclaration.TypeReference != null)); Debug.Assert((propertyDeclaration.TypeReference != null));
Debug.Assert((propertyDeclaration.GetRegion != null)); Debug.Assert((propertyDeclaration.GetRegion != null));
Debug.Assert((propertyDeclaration.SetRegion != null)); Debug.Assert((propertyDeclaration.SetRegion != null));
Debug.Assert((propertyDeclaration.Parameters != null)); for (int i = 0; i < propertyDeclaration.Attributes.Count; i++) {
Debug.Assert((propertyDeclaration.Attributes != null)); AttributeSection o = propertyDeclaration.Attributes[i];
for (int i = 0; i < propertyDeclaration.InterfaceImplementations.Count; i++) {
InterfaceImplementation o = propertyDeclaration.InterfaceImplementations[i];
Debug.Assert(o != null); Debug.Assert(o != null);
nodeStack.Push(o); nodeStack.Push(o);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
o = (InterfaceImplementation)nodeStack.Pop(); o = (AttributeSection)nodeStack.Pop();
if (o == null) if (o == null)
propertyDeclaration.InterfaceImplementations.RemoveAt(i--); propertyDeclaration.Attributes.RemoveAt(i--);
else else
propertyDeclaration.InterfaceImplementations[i] = o; propertyDeclaration.Attributes[i] = o;
} }
nodeStack.Push(propertyDeclaration.TypeReference);
propertyDeclaration.TypeReference.AcceptVisitor(this, data);
propertyDeclaration.TypeReference = ((TypeReference)(nodeStack.Pop()));
nodeStack.Push(propertyDeclaration.GetRegion);
propertyDeclaration.GetRegion.AcceptVisitor(this, data);
propertyDeclaration.GetRegion = ((PropertyGetRegion)(nodeStack.Pop()));
nodeStack.Push(propertyDeclaration.SetRegion);
propertyDeclaration.SetRegion.AcceptVisitor(this, data);
propertyDeclaration.SetRegion = ((PropertySetRegion)(nodeStack.Pop()));
for (int i = 0; i < propertyDeclaration.Parameters.Count; i++) { for (int i = 0; i < propertyDeclaration.Parameters.Count; i++) {
ParameterDeclarationExpression o = propertyDeclaration.Parameters[i]; ParameterDeclarationExpression o = propertyDeclaration.Parameters[i];
Debug.Assert(o != null); Debug.Assert(o != null);
@ -1386,27 +1377,33 @@ namespace ICSharpCode.NRefactory.Parser {
else else
propertyDeclaration.Parameters[i] = o; propertyDeclaration.Parameters[i] = o;
} }
for (int i = 0; i < propertyDeclaration.Attributes.Count; i++) { for (int i = 0; i < propertyDeclaration.InterfaceImplementations.Count; i++) {
AttributeSection o = propertyDeclaration.Attributes[i]; InterfaceImplementation o = propertyDeclaration.InterfaceImplementations[i];
Debug.Assert(o != null); Debug.Assert(o != null);
nodeStack.Push(o); nodeStack.Push(o);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop(); o = (InterfaceImplementation)nodeStack.Pop();
if (o == null) if (o == null)
propertyDeclaration.Attributes.RemoveAt(i--); propertyDeclaration.InterfaceImplementations.RemoveAt(i--);
else else
propertyDeclaration.Attributes[i] = o; propertyDeclaration.InterfaceImplementations[i] = o;
} }
nodeStack.Push(propertyDeclaration.TypeReference);
propertyDeclaration.TypeReference.AcceptVisitor(this, data);
propertyDeclaration.TypeReference = ((TypeReference)(nodeStack.Pop()));
nodeStack.Push(propertyDeclaration.GetRegion);
propertyDeclaration.GetRegion.AcceptVisitor(this, data);
propertyDeclaration.GetRegion = ((PropertyGetRegion)(nodeStack.Pop()));
nodeStack.Push(propertyDeclaration.SetRegion);
propertyDeclaration.SetRegion.AcceptVisitor(this, data);
propertyDeclaration.SetRegion = ((PropertySetRegion)(nodeStack.Pop()));
return null; return null;
} }
public virtual object Visit(PropertyGetRegion propertyGetRegion, object data) { public virtual object Visit(PropertyGetRegion propertyGetRegion, object data) {
Debug.Assert((propertyGetRegion != null)); Debug.Assert((propertyGetRegion != null));
Debug.Assert((propertyGetRegion.Block != null));
Debug.Assert((propertyGetRegion.Attributes != null)); Debug.Assert((propertyGetRegion.Attributes != null));
nodeStack.Push(propertyGetRegion.Block); Debug.Assert((propertyGetRegion.Block != null));
propertyGetRegion.Block.AcceptVisitor(this, data);
propertyGetRegion.Block = ((BlockStatement)(nodeStack.Pop()));
for (int i = 0; i < propertyGetRegion.Attributes.Count; i++) { for (int i = 0; i < propertyGetRegion.Attributes.Count; i++) {
AttributeSection o = propertyGetRegion.Attributes[i]; AttributeSection o = propertyGetRegion.Attributes[i];
Debug.Assert(o != null); Debug.Assert(o != null);
@ -1418,38 +1415,41 @@ namespace ICSharpCode.NRefactory.Parser {
else else
propertyGetRegion.Attributes[i] = o; propertyGetRegion.Attributes[i] = o;
} }
nodeStack.Push(propertyGetRegion.Block);
propertyGetRegion.Block.AcceptVisitor(this, data);
propertyGetRegion.Block = ((BlockStatement)(nodeStack.Pop()));
return null; return null;
} }
public virtual object Visit(PropertySetRegion propertySetRegion, object data) { public virtual object Visit(PropertySetRegion propertySetRegion, object data) {
Debug.Assert((propertySetRegion != null)); Debug.Assert((propertySetRegion != null));
Debug.Assert((propertySetRegion.Parameters != null));
Debug.Assert((propertySetRegion.Block != null));
Debug.Assert((propertySetRegion.Attributes != null)); Debug.Assert((propertySetRegion.Attributes != null));
for (int i = 0; i < propertySetRegion.Parameters.Count; i++) { Debug.Assert((propertySetRegion.Block != null));
ParameterDeclarationExpression o = propertySetRegion.Parameters[i]; Debug.Assert((propertySetRegion.Parameters != null));
for (int i = 0; i < propertySetRegion.Attributes.Count; i++) {
AttributeSection o = propertySetRegion.Attributes[i];
Debug.Assert(o != null); Debug.Assert(o != null);
nodeStack.Push(o); nodeStack.Push(o);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
o = (ParameterDeclarationExpression)nodeStack.Pop(); o = (AttributeSection)nodeStack.Pop();
if (o == null) if (o == null)
propertySetRegion.Parameters.RemoveAt(i--); propertySetRegion.Attributes.RemoveAt(i--);
else else
propertySetRegion.Parameters[i] = o; propertySetRegion.Attributes[i] = o;
} }
nodeStack.Push(propertySetRegion.Block); nodeStack.Push(propertySetRegion.Block);
propertySetRegion.Block.AcceptVisitor(this, data); propertySetRegion.Block.AcceptVisitor(this, data);
propertySetRegion.Block = ((BlockStatement)(nodeStack.Pop())); propertySetRegion.Block = ((BlockStatement)(nodeStack.Pop()));
for (int i = 0; i < propertySetRegion.Attributes.Count; i++) { for (int i = 0; i < propertySetRegion.Parameters.Count; i++) {
AttributeSection o = propertySetRegion.Attributes[i]; ParameterDeclarationExpression o = propertySetRegion.Parameters[i];
Debug.Assert(o != null); Debug.Assert(o != null);
nodeStack.Push(o); nodeStack.Push(o);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop(); o = (ParameterDeclarationExpression)nodeStack.Pop();
if (o == null) if (o == null)
propertySetRegion.Attributes.RemoveAt(i--); propertySetRegion.Parameters.RemoveAt(i--);
else else
propertySetRegion.Attributes[i] = o; propertySetRegion.Parameters[i] = o;
} }
return null; return null;
} }
@ -1602,29 +1602,29 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(TemplateDefinition templateDefinition, object data) { public virtual object Visit(TemplateDefinition templateDefinition, object data) {
Debug.Assert((templateDefinition != null)); Debug.Assert((templateDefinition != null));
Debug.Assert((templateDefinition.Bases != null));
Debug.Assert((templateDefinition.Attributes != null)); Debug.Assert((templateDefinition.Attributes != null));
for (int i = 0; i < templateDefinition.Bases.Count; i++) { Debug.Assert((templateDefinition.Bases != null));
TypeReference o = templateDefinition.Bases[i]; for (int i = 0; i < templateDefinition.Attributes.Count; i++) {
AttributeSection o = templateDefinition.Attributes[i];
Debug.Assert(o != null); Debug.Assert(o != null);
nodeStack.Push(o); nodeStack.Push(o);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
o = (TypeReference)nodeStack.Pop(); o = (AttributeSection)nodeStack.Pop();
if (o == null) if (o == null)
templateDefinition.Bases.RemoveAt(i--); templateDefinition.Attributes.RemoveAt(i--);
else else
templateDefinition.Bases[i] = o; templateDefinition.Attributes[i] = o;
} }
for (int i = 0; i < templateDefinition.Attributes.Count; i++) { for (int i = 0; i < templateDefinition.Bases.Count; i++) {
AttributeSection o = templateDefinition.Attributes[i]; TypeReference o = templateDefinition.Bases[i];
Debug.Assert(o != null); Debug.Assert(o != null);
nodeStack.Push(o); nodeStack.Push(o);
o.AcceptVisitor(this, data); o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop(); o = (TypeReference)nodeStack.Pop();
if (o == null) if (o == null)
templateDefinition.Attributes.RemoveAt(i--); templateDefinition.Bases.RemoveAt(i--);
else else
templateDefinition.Attributes[i] = o; templateDefinition.Bases[i] = o;
} }
return null; return null;
} }
@ -1670,9 +1670,20 @@ namespace ICSharpCode.NRefactory.Parser {
public virtual object Visit(TypeDeclaration typeDeclaration, object data) { public virtual object Visit(TypeDeclaration typeDeclaration, object data) {
Debug.Assert((typeDeclaration != null)); Debug.Assert((typeDeclaration != null));
Debug.Assert((typeDeclaration.Attributes != null));
Debug.Assert((typeDeclaration.BaseTypes != null)); Debug.Assert((typeDeclaration.BaseTypes != null));
Debug.Assert((typeDeclaration.Templates != null)); Debug.Assert((typeDeclaration.Templates != null));
Debug.Assert((typeDeclaration.Attributes != null)); for (int i = 0; i < typeDeclaration.Attributes.Count; i++) {
AttributeSection o = typeDeclaration.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
typeDeclaration.Attributes.RemoveAt(i--);
else
typeDeclaration.Attributes[i] = o;
}
for (int i = 0; i < typeDeclaration.BaseTypes.Count; i++) { for (int i = 0; i < typeDeclaration.BaseTypes.Count; i++) {
TypeReference o = typeDeclaration.BaseTypes[i]; TypeReference o = typeDeclaration.BaseTypes[i];
Debug.Assert(o != null); Debug.Assert(o != null);
@ -1695,17 +1706,6 @@ namespace ICSharpCode.NRefactory.Parser {
else else
typeDeclaration.Templates[i] = o; typeDeclaration.Templates[i] = o;
} }
for (int i = 0; i < typeDeclaration.Attributes.Count; i++) {
AttributeSection o = typeDeclaration.Attributes[i];
Debug.Assert(o != null);
nodeStack.Push(o);
o.AcceptVisitor(this, data);
o = (AttributeSection)nodeStack.Pop();
if (o == null)
typeDeclaration.Attributes.RemoveAt(i--);
else
typeDeclaration.Attributes[i] = o;
}
for (int i = 0; i < typeDeclaration.Children.Count; i++) { for (int i = 0; i < typeDeclaration.Children.Count; i++) {
INode o = typeDeclaration.Children[i]; INode o = typeDeclaration.Children[i];
Debug.Assert(o != null); Debug.Assert(o != null);

37
src/Libraries/NRefactory/Project/Src/Parser/Visitors/PrefixFieldsVisitor.cs

@ -29,7 +29,7 @@ namespace ICSharpCode.NRefactory.Parser
public void Run(TypeDeclaration typeDeclaration) public void Run(TypeDeclaration typeDeclaration)
{ {
base.Visit(typeDeclaration, null); typeDeclaration.AcceptChildren(this, null);
foreach (VariableDeclaration decl in fields) { foreach (VariableDeclaration decl in fields) {
decl.Name = prefix + decl.Name; decl.Name = prefix + decl.Name;
} }
@ -37,8 +37,10 @@ namespace ICSharpCode.NRefactory.Parser
public override object Visit(TypeDeclaration typeDeclaration, object data) public override object Visit(TypeDeclaration typeDeclaration, object data)
{ {
// TODO: treat fields of base types like locals Push();
return base.Visit(typeDeclaration, data); object result = base.Visit(typeDeclaration, data);
Pop();
return result;
} }
public override object Visit(BlockStatement blockStatement, object data) public override object Visit(BlockStatement blockStatement, object data)
@ -57,18 +59,10 @@ namespace ICSharpCode.NRefactory.Parser
return result; return result;
} }
public override object Visit(PropertyGetRegion p, object data) public override object Visit(PropertyDeclaration propertyDeclaration, object data)
{
Push();
object result = base.Visit(p, data);
Pop();
return result;
}
public override object Visit(PropertySetRegion p, object data)
{ {
Push(); Push();
object result = base.Visit(p, data); object result = base.Visit(propertyDeclaration, data);
Pop(); Pop();
return result; return result;
} }
@ -92,13 +86,14 @@ namespace ICSharpCode.NRefactory.Parser
curBlock = blocks.Pop(); curBlock = blocks.Pop();
} }
public override object Visit(LocalVariableDeclaration localVariableDeclaration, object data) public override object Visit(VariableDeclaration variableDeclaration, object data)
{ {
foreach (VariableDeclaration decl in localVariableDeclaration.Variables) { // process local variables only
//print("add variable ${decl.Name} to block") if (fields.Contains(variableDeclaration)) {
curBlock.Add(decl.Name); return null;
} }
return base.Visit(localVariableDeclaration, data); curBlock.Add(variableDeclaration.Name);
return base.Visit(variableDeclaration, data);
} }
public override object Visit(ParameterDeclarationExpression parameterDeclarationExpression, object data) public override object Visit(ParameterDeclarationExpression parameterDeclarationExpression, object data)
@ -108,6 +103,12 @@ namespace ICSharpCode.NRefactory.Parser
return base.Visit(parameterDeclarationExpression, data); return base.Visit(parameterDeclarationExpression, data);
} }
public override object Visit(ForeachStatement foreachStatement, object data)
{
curBlock.Add(foreachStatement.VariableName);
return base.Visit(foreachStatement, data);
}
public override object Visit(IdentifierExpression identifierExpression, object data) public override object Visit(IdentifierExpression identifierExpression, object data)
{ {
string name = identifierExpression.Identifier; string name = identifierExpression.Identifier;

33
src/Libraries/NRefactory/Project/Src/Parser/Visitors/VBNetConstructsConvertVisitor.cs

@ -26,6 +26,7 @@ namespace ICSharpCode.NRefactory.Parser
// The following conversions are implemented: // The following conversions are implemented:
// MyBase.New() and MyClass.New() calls inside the constructor are converted to :base() and :this() // MyBase.New() and MyClass.New() calls inside the constructor are converted to :base() and :this()
// Add Public Modifier to methods and properties // Add Public Modifier to methods and properties
// Override Finalize => Destructor
// The following conversions should be implemented in the future: // The following conversions should be implemented in the future:
// Function A() \n A = SomeValue \n End Function -> convert to return statement // Function A() \n A = SomeValue \n End Function -> convert to return statement
@ -74,7 +75,7 @@ namespace ICSharpCode.NRefactory.Parser
if (ie != null) { if (ie != null) {
FieldReferenceExpression fre = ie.TargetObject as FieldReferenceExpression; FieldReferenceExpression fre = ie.TargetObject as FieldReferenceExpression;
if (fre != null && "New".Equals(fre.FieldName, StringComparison.InvariantCultureIgnoreCase)) { if (fre != null && "New".Equals(fre.FieldName, StringComparison.InvariantCultureIgnoreCase)) {
if (fre.TargetObject is BaseReferenceExpression || fre.TargetObject is ClassReferenceExpression) { if (fre.TargetObject is BaseReferenceExpression || fre.TargetObject is ClassReferenceExpression || fre.TargetObject is ThisReferenceExpression) {
body.Children.RemoveAt(0); body.Children.RemoveAt(0);
ConstructorInitializer ci = new ConstructorInitializer(); ConstructorInitializer ci = new ConstructorInitializer();
ci.Arguments = ie.Arguments; ci.Arguments = ie.Arguments;
@ -144,6 +145,36 @@ namespace ICSharpCode.NRefactory.Parser
if ((methodDeclaration.Modifier & Modifier.Visibility) == 0) if ((methodDeclaration.Modifier & Modifier.Visibility) == 0)
methodDeclaration.Modifier |= Modifier.Public; methodDeclaration.Modifier |= Modifier.Public;
if ("Finalize".Equals(methodDeclaration.Name, StringComparison.InvariantCultureIgnoreCase)
&& methodDeclaration.Parameters.Count == 0
&& methodDeclaration.Modifier == (Modifier.Protected | Modifier.Override)
&& methodDeclaration.Body.Children.Count == 1)
{
TryCatchStatement tcs = methodDeclaration.Body.Children[0] as TryCatchStatement;
if (tcs != null
&& tcs.StatementBlock is BlockStatement
&& tcs.CatchClauses.Count == 0
&& tcs.FinallyBlock is BlockStatement
&& tcs.FinallyBlock.Children.Count == 1)
{
StatementExpression se = tcs.FinallyBlock.Children[0] as StatementExpression;
if (se != null) {
InvocationExpression ie = se.Expression as InvocationExpression;
if (ie != null
&& ie.Arguments.Count == 0
&& ie.TargetObject is FieldReferenceExpression
&& (ie.TargetObject as FieldReferenceExpression).TargetObject is BaseReferenceExpression
&& "Finalize".Equals((ie.TargetObject as FieldReferenceExpression).FieldName, StringComparison.InvariantCultureIgnoreCase))
{
DestructorDeclaration des = new DestructorDeclaration("Destructor", Modifier.None, methodDeclaration.Attributes);
ReplaceCurrentNode(des);
des.Body = (BlockStatement)tcs.StatementBlock;
return base.Visit(des, data);
}
}
}
}
if ((methodDeclaration.Modifier & (Modifier.Static | Modifier.Extern)) == Modifier.Static if ((methodDeclaration.Modifier & (Modifier.Static | Modifier.Extern)) == Modifier.Static
&& methodDeclaration.Body.Children.Count == 0) && methodDeclaration.Body.Children.Count == 0)
{ {

1
src/Libraries/NRefactory/Test/NRefactoryTests.csproj

@ -142,6 +142,7 @@
<Compile Include="Output\VBNet\VBNetOutputTest.cs" /> <Compile Include="Output\VBNet\VBNetOutputTest.cs" />
<Compile Include="Output\VBNet\CSharpToVBConverterTest.cs" /> <Compile Include="Output\VBNet\CSharpToVBConverterTest.cs" />
<Compile Include="Output\CSharp\VBToCSharpConverterTest.cs" /> <Compile Include="Output\CSharp\VBToCSharpConverterTest.cs" />
<Compile Include="Output\SpecialOutputVisitor.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Project\NRefactory.csproj"> <ProjectReference Include="..\Project\NRefactory.csproj">

93
src/Libraries/NRefactory/Test/Output/CSharp/CSharpOutputTest.cs

@ -28,7 +28,7 @@ namespace ICSharpCode.NRefactory.Tests.PrettyPrinter
Assert.AreEqual(StripWhitespace(program), StripWhitespace(outputVisitor.Text)); Assert.AreEqual(StripWhitespace(program), StripWhitespace(outputVisitor.Text));
} }
string StripWhitespace(string text) internal static string StripWhitespace(string text)
{ {
return text.Trim().Replace("\t", "").Replace("\r", "").Replace("\n", " ").Replace(" ", " "); return text.Trim().Replace("\t", "").Replace("\r", "").Replace("\n", " ").Replace(" ", " ");
} }
@ -54,6 +54,21 @@ namespace ICSharpCode.NRefactory.Tests.PrettyPrinter
Assert.AreEqual(StripWhitespace(expression), StripWhitespace(outputVisitor.Text)); Assert.AreEqual(StripWhitespace(expression), StripWhitespace(outputVisitor.Text));
} }
[Test]
public void Namespace()
{
TestProgram("namespace System { }");
}
[Test]
public void CustomEvent()
{
TestTypeMember("public event EventHandler Click {" +
" add { obj.Click += value; }" +
" remove { obj.Click -= value; } " +
"}");
}
[Test] [Test]
public void Field() public void Field()
{ {
@ -130,6 +145,69 @@ namespace ICSharpCode.NRefactory.Tests.PrettyPrinter
TestExpression("a = b"); TestExpression("a = b");
} }
[Test]
public void UnaryOperator()
{
TestExpression("a = -b");
}
[Test]
public void BlockStatements()
{
TestStatement("checked { }");
TestStatement("unchecked { }");
TestStatement("unsafe { }");
}
[Test]
public void ExceptionHandling()
{
TestStatement("try { throw new Exception(); } " +
"catch (FirstException e) { } " +
"catch (SecondException) { } " +
"catch { throw; } " +
"finally { }");
}
[Test]
public void LoopStatements()
{
TestStatement("foreach (Type var in col) { }");
TestStatement("while (true) { }");
TestStatement("do { } while (true);");
}
[Test]
public void SizeOf()
{
TestExpression("sizeof(IntPtr)");
}
[Test]
public void ParenthesizedExpression()
{
TestExpression("(a)");
}
[Test]
public void MethodOnGenericClass()
{
TestExpression("Container<string>.CreateInstance()");
}
[Test]
public void EmptyStatement()
{
TestStatement(";");
}
[Test]
public void Yield()
{
TestStatement("yield break;");
TestStatement("yield return null;");
}
[Test] [Test]
public void Integer() public void Integer()
{ {
@ -191,6 +269,12 @@ namespace ICSharpCode.NRefactory.Tests.PrettyPrinter
TestExpression("@class"); TestExpression("@class");
} }
[Test]
public void InnerClassTypeReference()
{
TestExpression("typeof(List<string>.Enumerator)");
}
[Test] [Test]
public void GenericDelegate() public void GenericDelegate()
{ {
@ -247,5 +331,12 @@ namespace ICSharpCode.NRefactory.Tests.PrettyPrinter
" string InterfaceMethod2();\n" + " string InterfaceMethod2();\n" +
"}"); "}");
} }
[Test]
public void IndexerDeclaration()
{
TestTypeMember("public string this[int index] { get { return index.ToString(); } set { } }");
TestTypeMember("public string IList.this[int index] { get { return index.ToString(); } set { } }");
}
} }
} }

62
src/Libraries/NRefactory/Test/Output/CSharp/VBToCSharpConverterTest.cs

@ -75,6 +75,23 @@ namespace ICSharpCode.NRefactory.Tests.PrettyPrinter
TestProgram("Class tmp1 \n Sub tmp2() \n" + input + "\n End Sub \n End Class", b.ToString()); TestProgram("Class tmp1 \n Sub tmp2() \n" + input + "\n End Sub \n End Class", b.ToString());
} }
[Test]
public void ReferenceEquality()
{
TestStatement("b = a Is Nothing",
"b = a == null;");
TestStatement("b = a IsNot Nothing",
"b = a != null;");
TestStatement("b = Nothing Is a",
"b = null == a;");
TestStatement("b = Nothing IsNot a",
"b = null != a;");
TestStatement("c = a Is b",
"c = object.ReferenceEquals(a, b);");
TestStatement("c = a IsNot b",
"c = !object.ReferenceEquals(a, b);");
}
[Test] [Test]
public void AddHandler() public void AddHandler()
{ {
@ -100,6 +117,13 @@ namespace ICSharpCode.NRefactory.Tests.PrettyPrinter
"if (someEvent != null) {\n\tsomeEvent(this, EventArgs.Empty);\n}"); "if (someEvent != null) {\n\tsomeEvent(this, EventArgs.Empty);\n}");
} }
[Test]
public void EraseStatement()
{
TestStatement("Erase a, b",
"a = null;\nb = null;");
}
[Test] [Test]
public void StaticMethod() public void StaticMethod()
{ {
@ -107,6 +131,13 @@ namespace ICSharpCode.NRefactory.Tests.PrettyPrinter
"public static void A()\n{\n}"); "public static void A()\n{\n}");
} }
[Test]
public void Property()
{
TestMember("ReadOnly Property A()\nGet\nReturn Nothing\nEnd Get\nEnd Property",
"public object A {\n\tget {\n\t\treturn null;\n\t}\n}");
}
[Test] [Test]
public void PInvoke() public void PInvoke()
{ {
@ -120,11 +151,42 @@ namespace ICSharpCode.NRefactory.Tests.PrettyPrinter
"static extern IntPtr SendMessage(IntPtr hWnd, int Msg, UIntPtr wParam, IntPtr lParam);", "static extern IntPtr SendMessage(IntPtr hWnd, int Msg, UIntPtr wParam, IntPtr lParam);",
"System.Runtime.InteropServices"); "System.Runtime.InteropServices");
TestMember("Declare Auto Function SendMessage Lib \"user32.dll\" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As UIntPtr, ByVal lParam As IntPtr) As IntPtr",
"[DllImport(\"user32.dll\", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]\n" +
"static extern IntPtr SendMessage(IntPtr hWnd, int Msg, UIntPtr wParam, IntPtr lParam);",
"System.Runtime.InteropServices");
TestMember("<DllImport(\"user32.dll\", CharSet:=CharSet.Auto)> _\n" + TestMember("<DllImport(\"user32.dll\", CharSet:=CharSet.Auto)> _\n" +
"Shared Function MessageBox(ByVal hwnd As IntPtr, ByVal t As String, ByVal caption As String, ByVal t2 As UInt32) As Integer\n" + "Shared Function MessageBox(ByVal hwnd As IntPtr, ByVal t As String, ByVal caption As String, ByVal t2 As UInt32) As Integer\n" +
"End Function", "End Function",
"[DllImport(\"user32.dll\", CharSet = CharSet.Auto)]\n" + "[DllImport(\"user32.dll\", CharSet = CharSet.Auto)]\n" +
"public static extern int MessageBox(IntPtr hwnd, string t, string caption, UInt32 t2);"); "public static extern int MessageBox(IntPtr hwnd, string t, string caption, UInt32 t2);");
} }
[Test]
public void Constructor()
{
TestMember("Sub New()\n\tMyBase.New(1)\nEnd Sub",
"public tmp1() : base(1)\n{\n}");
TestMember("Public Sub New()\n\tMe.New(1)\nEnd Sub",
"public tmp1() : this(1)\n{\n}");
}
[Test]
public void Destructor()
{
TestMember("Protected Overrides Sub Finalize()\n" +
"\tTry\n" +
"\t\tDead()\n" +
"\tFinally\n" +
"\t\tMyBase.Finalize()\n" +
"\tEnd Try\n" +
"End Sub",
"~tmp1()\n" +
"{\n" +
"\tDead();\n" +
"}");
}
} }
} }

67
src/Libraries/NRefactory/Test/Output/SpecialOutputVisitor.cs

@ -0,0 +1,67 @@
/*
* Created by SharpDevelop.
* User: Daniel Grunwald
* Date: 06.02.2006
* Time: 14:41
*/
using System;
using System.IO;
using NUnit.Framework;
using ICSharpCode.NRefactory.Parser;
using ICSharpCode.NRefactory.Parser.AST;
using ICSharpCode.NRefactory.PrettyPrinter;
namespace ICSharpCode.NRefactory.Tests.PrettyPrinter
{
[TestFixture]
public class SpecialOutputVisitorTest
{
void TestProgram(string program)
{
IParser parser = ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(program));
parser.Parse();
Assert.AreEqual("", parser.Errors.ErrorOutput);
CSharpOutputVisitor outputVisitor = new CSharpOutputVisitor();
using (SpecialNodesInserter.Install(parser.Lexer.SpecialTracker.RetrieveSpecials(),
outputVisitor)) {
outputVisitor.Visit(parser.CompilationUnit, null);
}
Assert.AreEqual("", outputVisitor.Errors.ErrorOutput);
Assert.AreEqual(program, outputVisitor.Text.TrimEnd().Replace("\r", ""));
parser.Dispose();
}
[Test]
public void SimpleComments()
{
TestProgram("// before class\n" +
"class A\n" +
"{\n" +
"\t// in class\n" +
"}\n" +
"// after class");
}
[Test, Ignore("Requires BlankLine to work correctly")]
public void BlockComment()
{
TestProgram("/* before class */\n" +
"class A\n" +
"{\n" +
"\t/* in class */\n" +
"}\n" +
"/* after class */");
}
[Test]
public void PreProcessing()
{
TestProgram("#if WITH_A\n" +
"class A\n" +
"{\n" +
"}\n" +
"#end if");
}
}
}

51
src/Libraries/NRefactory/Test/Output/VBNet/CSharpToVBConverterTest.cs

@ -215,5 +215,56 @@ namespace ICSharpCode.NRefactory.Tests.PrettyPrinter
"public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, UIntPtr wParam, IntPtr lParam);", "public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, UIntPtr wParam, IntPtr lParam);",
"Public Declare Auto Function SendMessage Lib \"user32.dll\" Alias \"SendMessageW\" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As UIntPtr, ByVal lParam As IntPtr) As IntPtr"); "Public Declare Auto Function SendMessage Lib \"user32.dll\" Alias \"SendMessageW\" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As UIntPtr, ByVal lParam As IntPtr) As IntPtr");
} }
[Test]
public void Constructor()
{
TestMember("public tmp1() : base(1) { }",
"Public Sub New()\n\tMyBase.New(1)\nEnd Sub");
TestMember("public tmp1() : this(1) { }",
"Public Sub New()\n\tMe.New(1)\nEnd Sub");
}
[Test]
public void Destructor()
{
TestMember("~tmp1() { Dead(); }",
"Protected Overrides Sub Finalize()\n" +
"\tTry\n" +
"\t\tDead()\n" +
"\tFinally\n" +
"\t\tMyBase.Finalize()\n" +
"\tEnd Try\n" +
"End Sub");
}
[Test]
public void RenameConflictingNames()
{
TestMember("int count;" +
"public int Count { get { return count; } }" +
"void Test1(int count) { count = 3; }" +
"void Test2() { int count; count = 3; }" +
"void Test3() { foreach (int count in someList) { count = 3; } }",
"Private m_count As Integer\n" +
"Public ReadOnly Property Count() As Integer\n" +
"\tGet\n" +
"\t\tReturn m_count\n" +
"\tEnd Get\n" +
"End Property\n" +
"Private Sub Test1(ByVal count As Integer)\n" +
"\tcount = 3\n" +
"End Sub\n" +
"Private Sub Test2()\n" +
"\tDim count As Integer\n" +
"\tcount = 3\n" +
"End Sub\n" +
"Private Sub Test3()\n" +
"\tFor Each count As Integer In someList\n" +
"\t\tcount = 3\n" +
"\tNext\n" +
"End Sub");
}
} }
} }

Loading…
Cancel
Save