Exemplo n.º 1
0
        public void Parse()
        {
            // Arrange
            var parser   = new Parser("a.Length");
            var variable = new Variable("a", false, Types.String);

            parser.PushScopeStack();
            parser.CurrentScope.Add(variable);
            var memberParser = new MemberParser(parser);

            // Act
            var result = memberParser.Parse();

            // Assert
            Assert.That(result, Is.Not.Null);
        }
Exemplo n.º 2
0
        public bool TryParse(Expression e, out object val,
                             MemberInfo memberInfo           = null,
                             IReadOnlyList <Expression> args = null)
        {
            bool bOther = false;

            if (MethodCallParser.TryParse(e, out val, memberInfo, args))
            {
            }
            else if (MemberParser.TryParse(e, out val, memberInfo, args))
            {
            }
            else if (ConstParser.TryParse(e, out val, memberInfo, args))
            {
            }
            else if (NewArrayParser.TryParse(e, out val, memberInfo, args))
            {
                //解析出来之后,显示的数据依然是:Trim(value(System.Char[]))
                //在EF的Where中是不支持l.name.Trim('_')这样的操作的,只能支持:l.name.Trim()
                //但是还是需要进行解析,不然会交由OtherParser(DynamicParser)进行解析了
            }
            else if (UnaryParser.TryParse(e, out val, memberInfo, args))
            {
            }
            else
            {
                bOther = true;
                OtherParser.TryParse(e, out val, memberInfo, args);
            }

            //不是OtherParser解析的,而且val不为null,判断val的类型与Expression.Type的类型是否一致
            if (!bOther && val != null)
            {
                val = GetRightfulValue(e, val);
            }

            return(true);
        }
        public AssemblyParser(
            string assemblyPath,
            string projectPath,
            string parentName,
            Action <NodeData> nodeCallback,
            Action <LinkData> linkCallback,
            bool isReadSymbols)
        {
            ProjectPath       = projectPath;
            this.assemblyPath = assemblyPath;
            this.parentName   = parentName;
            this.nodeCallback = nodeCallback;

            XmlDocParser xmlDockParser = new XmlDocParser(assemblyPath);

            linkHandler = new LinkHandler(linkCallback);

            assemblyReferencesParser = new AssemblyReferencesParser(linkHandler, nodeCallback);
            typeParser   = new TypeParser(linkHandler, xmlDockParser, nodeCallback);
            memberParser = new MemberParser(linkHandler, xmlDockParser, nodeCallback);

            assembly = new Lazy <AssemblyDefinition>(() => GetAssembly(isReadSymbols));
        }