namespace My.Qltest
{
    public class A
    {
        void Foo()
        {
            object x;
            x = Src1();
            x = Src1("");

            Sub sub = new Sub();
            x = sub.Src2();
            x = sub.Src3();

            SrcArg(x);

            x = TaggedSrcMethod();
            x = TaggedSrcField;

            x = SrcTwoArg("", "");
        }

        [SourceAttribute()]
        void Tagged1(object taggedMethodParam)
        {
        }

        void Tagged2([SourceAttribute()] object taggedSrcParam)
        {
        }

        object Src1() { return null; }

        object Src1(string s) { return null; }

        object Src2() { return null; }

        public virtual object Src3() { return null; }

        public virtual void SrcParam(object p) { }

        class Sub : A
        {
            // inherit src2
            public override object Src3() { return null; }

            public override void SrcParam(object p) { }
        }

        void SrcArg(object src) { }

        [SourceAttribute()]
        object TaggedSrcMethod() { return null; }

        [SourceAttribute()]
        object TaggedSrcField;

        object SrcTwoArg(string s1, string s2) { return null; }
    }

    class SourceAttribute : System.Attribute { }
}