PageRenderTime 32ms CodeModel.GetById 16ms app.highlight 11ms RepoModel.GetById 1ms app.codeStats 0ms

/NRefactory/ICSharpCode.NRefactory.CSharp/Ast/Statements/ForeachStatement.cs

http://github.com/icsharpcode/ILSpy
C# | 108 lines | 66 code | 14 blank | 28 comment | 5 complexity | 2db18cffc16e345c210ba48310fccf71 MD5 | raw file
  1// 
  2// ForeachStatement.cs
  3//
  4// Author:
  5//       Mike Kr├╝ger <mkrueger@novell.com>
  6// 
  7// Copyright (c) 2009 Novell, Inc (http://www.novell.com)
  8// 
  9// Permission is hereby granted, free of charge, to any person obtaining a copy
 10// of this software and associated documentation files (the "Software"), to deal
 11// in the Software without restriction, including without limitation the rights
 12// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 13// copies of the Software, and to permit persons to whom the Software is
 14// furnished to do so, subject to the following conditions:
 15// 
 16// The above copyright notice and this permission notice shall be included in
 17// all copies or substantial portions of the Software.
 18// 
 19// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 20// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 21// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 22// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 23// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 24// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 25// THE SOFTWARE.
 26
 27namespace ICSharpCode.NRefactory.CSharp
 28{
 29	/// <summary>
 30	/// foreach (Type VariableName in InExpression) EmbeddedStatement
 31	/// </summary>
 32	public class ForeachStatement : Statement
 33	{
 34		public static readonly TokenRole ForeachKeywordRole = new TokenRole ("foreach");
 35		public static readonly TokenRole InKeywordRole = new TokenRole ("in");
 36		
 37		public CSharpTokenNode ForeachToken {
 38			get { return GetChildByRole (ForeachKeywordRole); }
 39		}
 40		
 41		public CSharpTokenNode LParToken {
 42			get { return GetChildByRole (Roles.LPar); }
 43		}
 44		
 45		public AstType VariableType {
 46			get { return GetChildByRole (Roles.Type); }
 47			set { SetChildByRole (Roles.Type, value); }
 48		}
 49		
 50		public string VariableName {
 51			get {
 52				return GetChildByRole (Roles.Identifier).Name;
 53			}
 54			set {
 55				SetChildByRole(Roles.Identifier, Identifier.Create (value));
 56			}
 57		}
 58		
 59		public Identifier VariableNameToken {
 60			get {
 61				return GetChildByRole (Roles.Identifier);
 62			}
 63			set {
 64				SetChildByRole(Roles.Identifier, value);
 65			}
 66		}
 67		
 68		public CSharpTokenNode InToken {
 69			get { return GetChildByRole (InKeywordRole); }
 70		}
 71		
 72		public Expression InExpression {
 73			get { return GetChildByRole (Roles.Expression); }
 74			set { SetChildByRole (Roles.Expression, value); }
 75		}
 76		
 77		public CSharpTokenNode RParToken {
 78			get { return GetChildByRole (Roles.RPar); }
 79		}
 80		
 81		public Statement EmbeddedStatement {
 82			get { return GetChildByRole (Roles.EmbeddedStatement); }
 83			set { SetChildByRole (Roles.EmbeddedStatement, value); }
 84		}
 85		
 86		public override void AcceptVisitor (IAstVisitor visitor)
 87		{
 88			visitor.VisitForeachStatement (this);
 89		}
 90			
 91		public override T AcceptVisitor<T> (IAstVisitor<T> visitor)
 92		{
 93			return visitor.VisitForeachStatement (this);
 94		}
 95		
 96		public override S AcceptVisitor<T, S> (IAstVisitor<T, S> visitor, T data)
 97		{
 98			return visitor.VisitForeachStatement (this, data);
 99		}
100		
101		protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
102		{
103			ForeachStatement o = other as ForeachStatement;
104			return o != null && this.VariableType.DoMatch(o.VariableType, match) && MatchString(this.VariableName, o.VariableName)
105				&& this.InExpression.DoMatch(o.InExpression, match) && this.EmbeddedStatement.DoMatch(o.EmbeddedStatement, match);
106		}
107	}
108}