CompletionDataList HandleExpressionCompletion(WebFormsExpression expr)
        {
            if (!(expr is WebFormsBindingExpression || expr is WebFormsRenderExpression))
            {
                return(null);
            }

            INamedTypeSymbol codeBehindClass;

            if (!GetCodeBehind(out codeBehindClass))
            {
                return(null);
            }

            //list just the class's properties, not properties on base types
            var list = new CompletionDataList();

            list.AddRange(from p in codeBehindClass.GetMembers().OfType <IPropertySymbol> ()
                          where p.DeclaredAccessibility == Accessibility.Public
                          select new AspAttributeCompletionData(p));
            list.AddRange(from p in codeBehindClass.GetMembers().OfType <IFieldSymbol> ()
                          where p.DeclaredAccessibility == Accessibility.Protected || p.DeclaredAccessibility == Accessibility.Public
                          select new AspAttributeCompletionData(p));

            return(list.Count > 0? list : null);
        }
        CompletionDataList HandleExpressionCompletion(WebFormsExpression expr)
        {
            if (!(expr is WebFormsBindingExpression || expr is WebFormsRenderExpression))
            {
                return(null);
            }

            IType codeBehindClass;

            if (!GetCodeBehind(out codeBehindClass))
            {
                return(null);
            }

            //list just the class's properties, not properties on base types
            var list = new CompletionDataList();

            list.AddRange(from p in codeBehindClass.GetProperties()
                          where p.IsPublic || p.IsPublic
                          select new AspAttributeCompletionData(p));
            list.AddRange(from p in codeBehindClass.GetFields()
                          where p.IsProtected || p.IsPublic
                          select new AspAttributeCompletionData(p));

            return(list.Count > 0? list : null);
        }