PHPAnalysis.Analysis.CFG.VariableResolver.Node_Expr_StaticPropertyFetch C# (CSharp) Метод

Node_Expr_StaticPropertyFetch() приватный Метод

private Node_Expr_StaticPropertyFetch ( XmlNode node ) : VariableResolveResult
node System.Xml.XmlNode
Результат VariableResolveResult
        private VariableResolveResult Node_Expr_StaticPropertyFetch(XmlNode node)
        {
            var classNode = node.GetSubNode(AstConstants.Subnode + ":" + AstConstants.Subnodes.Class);
            var nameNode = node.GetSubNode(AstConstants.Subnode + ":" + AstConstants.Subnodes.Name);

            if (classNode.TryGetSubNode(AstConstants.Node + ":" + AstConstants.Nodes.Name, out classNode) &&
                classNode.TryGetSubNode(AstConstants.Subnode + ":" + AstConstants.Subnodes.Parts, out classNode) &&
                classNode.TryGetSubNode(AstConstants.Scalar + ":" + AstConstants.Scalars.Array, out classNode) &&
                classNode.TryGetSubNode(AstConstants.Scalar + ":" + AstConstants.Scalars.String, out classNode))
            {
                string className = classNode.InnerText;
                if (className == "self" || className == "parent")
                {
                    return new VariableResolveResult(new Variable("$UNKNOWN$", VariableScope.Class), true);
                    //throw new NotImplementedException("We need a way to handle class scopes before this can be effectively handled");
                }

                XmlNode nameStringNode;
                if (nameNode.TryGetSubNode(AstConstants.Scalar + ":" + AstConstants.Scalars.String, out nameStringNode))
                {
                    Variable field;

                    if (!_variableStorage.ClassVariables.TryGetValue(className, out field))
                    {
                        field = new Variable(className, VariableScope.Class);
                        _variableStorage.ClassVariables.Add(className, field);
                    }
                    if (field.Info.TryGetVariableByString(nameStringNode.InnerText, out field))
                    {
                        return new VariableResolveResult(field);
                    }

                    field = new Variable(nameStringNode.InnerText, VariableScope.Class);
                    _variableStorage.ClassVariables[className].Info.Variables.Add(new VariableTreeDimension() { Key = nameStringNode.InnerText }, field);
                    return new VariableResolveResult(field, true);
                }
            }

            return new VariableResolveResult(new Variable("$UNKNOWN$", VariableScope.Class), true);
        }