コード例 #1
0
		private static XpidlInterface CreateXpidlInterface(ComplexSyntaxNode interfaceSyntaxNode)
		{
			ValidateSyntaxNode(
				interfaceSyntaxNode, 
				RuleConstants.XpidlInterface1,
				RuleConstants.XpidlInterface2,
				RuleConstants.XpidlInterface3,
				RuleConstants.XpidlInterface4);

			String interfaceName = CreateXpidlId((SimpleSyntaxNode)interfaceSyntaxNode[2, true]);
			Guid uuid = CreateInterfaceUuid((ComplexSyntaxNode)interfaceSyntaxNode[0]);
			XpidlModifiers<XpidlInterfaceModifier> interfaceModifiers = CreateXpidlInterfaceModifiers((ComplexSyntaxNode)interfaceSyntaxNode[0]);
			String baseInterfaceName = null;

			switch ((RuleConstants)interfaceSyntaxNode.Rule.Index)
			{
				case RuleConstants.XpidlInterface1:
				case RuleConstants.XpidlInterface2:
					baseInterfaceName = CreateXpidlId((SimpleSyntaxNode)interfaceSyntaxNode[4, true]);
					break;
			}

			var xpidlInterface = new XpidlInterface(interfaceName, baseInterfaceName, uuid, interfaceModifiers);
			BuildXpidlInterface(xpidlInterface, interfaceSyntaxNode);
			return xpidlInterface;
		}
コード例 #2
0
		private static void BuildXpidlInterface(XpidlInterface xpidlInterface, ComplexSyntaxNode interfaceSyntaxNode)
		{
			switch ((RuleConstants) interfaceSyntaxNode.Rule.Index)
			{
				case RuleConstants.XpidlInterface1:
				case RuleConstants.XpidlInterface2:
				case RuleConstants.XpidlInterface3:
				case RuleConstants.XpidlInterface4:
				case RuleConstants.XpidlInterfaceMembers1:
				case RuleConstants.XpidlInterfaceMembers2:
				case RuleConstants.XpidlInterfaceMemberConstant:
				case RuleConstants.XpidlInterfaceMemberAttribute:
				case RuleConstants.XpidlInterfaceMemberMethod:
					foreach (SyntaxNode syntaxNode in interfaceSyntaxNode)
					{
						if (syntaxNode is CommentSyntaxNode)
						{
							var commentSyntaxNode = (CommentSyntaxNode) syntaxNode;
							if (commentSyntaxNode.IsInlineCHeader)
							{
								XpidlInlineCHeader xpidlInlineCHeader = CreateXpidlInlineCHeader(commentSyntaxNode);
								xpidlInterface.AddNode(xpidlInlineCHeader);
							}
							else
							{
								XpidlComment xpidlComment = CreateXpidlComment(commentSyntaxNode);
								xpidlInterface.AddNode(xpidlComment);
							}
						}
						else if (syntaxNode is ComplexSyntaxNode)
						{
							BuildXpidlInterface(xpidlInterface, (ComplexSyntaxNode) syntaxNode);
						}
					}
					break;

				case RuleConstants.XpidlConstant:
					XpidlConstant xpidlConstant = CreateXpidlConstant(interfaceSyntaxNode);
					xpidlInterface.AddNode(xpidlConstant);
					break;

				case RuleConstants.XpidlAttribute1:
				case RuleConstants.XpidlAttribute2:
				case RuleConstants.XpidlAttribute3:
				case RuleConstants.XpidlAttribute4:
					XpidlAttribute xpidlAttribute = CreateXpidlAttribute(interfaceSyntaxNode);
					xpidlInterface.AddNode(xpidlAttribute);
					break;

				case RuleConstants.XpidlMethod1:
				case RuleConstants.XpidlMethod2:
				case RuleConstants.XpidlMethod3:
				case RuleConstants.XpidlMethod4:
				case RuleConstants.XpidlMethod5:
				case RuleConstants.XpidlMethod6:
				case RuleConstants.XpidlMethod7:
				case RuleConstants.XpidlMethod8:
					XpidlMethod xpidlMethod = CreateXpidlMethod(interfaceSyntaxNode);
					xpidlInterface.AddNode(xpidlMethod);
					break;

				case RuleConstants.XpidlInterfaceModifiersDecl1:
				case RuleConstants.XpidlInterfaceModifiersDecl2:
					break;

				default:
					throw new ArgumentException(mc_InvalidSyntaxNode, "interfaceSyntaxNode");
			}
		}
コード例 #3
0
ファイル: XpidlFile.cs プロジェクト: Happy-Ferret/dotgecko
		internal void AddNode(XpidlInterface xpidlInterface)
		{
			AddNodeImpl(xpidlInterface);
		}