예제 #1
0
        protected ALFullSyntaxTreeNode ProcessSyntaxTreeNode(SyntaxTree syntaxTree, SyntaxNode node)
        {
            //process node
            ALFullSyntaxTreeNode alNode = CreateALNode(syntaxTree, node);

            if (alNode == null)
            {
                return(null);
            }

            //process child nodes
            IEnumerable <SyntaxNode> list = node.ChildNodes();

            if (list != null)
            {
                foreach (SyntaxNode childNode in list)
                {
                    ALFullSyntaxTreeNode childALNode = ProcessSyntaxTreeNode(syntaxTree, childNode);
                    if (childALNode != null)
                    {
                        alNode.AddChildNode(childALNode);
                    }
                }
            }

            return(alNode);
        }
예제 #2
0
        protected ALFullSyntaxTreeNode CreateALNode(SyntaxTree syntaxTree, SyntaxToken token)
        {
            //base syntax node properties
            ALFullSyntaxTreeNode alNode = new ALFullSyntaxTreeNode();

            alNode.kind = token.Kind.ToString();

            FileLinePositionSpan lineSpan = syntaxTree.GetLineSpan(token.FullSpan);

            alNode.fullSpan = new Range(lineSpan.StartLinePosition.Line, lineSpan.StartLinePosition.Character,
                                        lineSpan.EndLinePosition.Line, lineSpan.EndLinePosition.Character);

            lineSpan    = syntaxTree.GetLineSpan(token.Span);
            alNode.span = new Range(lineSpan.StartLinePosition.Line, lineSpan.StartLinePosition.Character,
                                    lineSpan.StartLinePosition.Line, lineSpan.StartLinePosition.Character);

            return(alNode);
        }
예제 #3
0
        protected ALFullSyntaxTreeNode CreateALNode(SyntaxTree syntaxTree, SyntaxNode node)
        {
            //base syntax node properties
            ALFullSyntaxTreeNode alNode = new ALFullSyntaxTreeNode();

            alNode.kind = node.Kind.ToString();

            FileLinePositionSpan lineSpan = syntaxTree.GetLineSpan(node.FullSpan);

            alNode.fullSpan = new Range(lineSpan.StartLinePosition.Line, lineSpan.StartLinePosition.Character,
                                        lineSpan.EndLinePosition.Line, lineSpan.EndLinePosition.Character);

            lineSpan    = syntaxTree.GetLineSpan(node.Span);
            alNode.span = new Range(lineSpan.StartLinePosition.Line, lineSpan.StartLinePosition.Character,
                                    lineSpan.StartLinePosition.Line, lineSpan.StartLinePosition.Character);

            //additional properties
            Type nodeType = node.GetType();

            alNode.name = ALSyntaxHelper.DecodeName(nodeType.TryGetPropertyValueAsString(node, "Name"));

            if (node.ContainsDiagnostics)
            {
                alNode.containsDiagnostics = true;
            }

            IEnumerable attributes = nodeType.TryGetPropertyValue <IEnumerable>(node, "Attributes");

            if (attributes != null)
            {
                foreach (SyntaxNode childNode in attributes)
                {
                    alNode.AddAttribute(CreateALNode(syntaxTree, childNode));
                }
            }

            SyntaxToken specialToken = nodeType.TryGetPropertyValue <SyntaxToken>(node, "OpenBraceToken");

            if ((specialToken != null) && (specialToken.Kind != SyntaxKind.None))
            {
                alNode.openBraceToken = CreateALNode(syntaxTree, specialToken);
            }

            specialToken = nodeType.TryGetPropertyValue <SyntaxToken>(node, "CloseBraceToken");
            if ((specialToken != null) && (specialToken.Kind != SyntaxKind.None))
            {
                alNode.closeBraceToken = CreateALNode(syntaxTree, specialToken);
            }

            specialToken = nodeType.TryGetPropertyValue <SyntaxToken>(node, "VarKeyword");
            if ((specialToken != null) && (specialToken.Kind != SyntaxKind.None))
            {
                alNode.varKeyword = CreateALNode(syntaxTree, specialToken);
            }

            alNode.accessModifier = nodeType.TryGetPropertyValueAsString(node, "AccessModifier");
            alNode.identifier     = nodeType.TryGetPropertyValueAsString(node, "Identifier");
            alNode.dataType       = nodeType.TryGetPropertyValueAsString(node, "DataType");
            alNode.temporary      = nodeType.TryGetPropertyValueAsString(node, "Temporary");

            return(alNode);
        }