static string GeneratePartialClassContextStub(DebuggerCompletionContext context)
        {
            var compilation = SD.ParserService.GetCompilationForFile(context.FileName);
            var file        = SD.ParserService.GetExistingUnresolvedFile(context.FileName);

            if (compilation == null || file == null)
            {
                return("");
            }
            var unresolvedMember = file.GetMember(context.Location);

            if (unresolvedMember == null)
            {
                return("");
            }
            var member = unresolvedMember.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly));

            if (member == null)
            {
                return("");
            }
            var builder = new TypeSystemAstBuilder();
            MethodDeclaration decl;

            if (unresolvedMember is IMethod)
            {
                // If it's a method, convert it directly (including parameters + type parameters)
                decl = (MethodDeclaration)builder.ConvertEntity(member);
            }
            else
            {
                // Otherwise, create a method anyways, and copy the parameters
                decl = new MethodDeclaration();
                if (member is IParameterizedMember)
                {
                    foreach (var p in ((IParameterizedMember)member).Parameters)
                    {
                        decl.Parameters.Add(builder.ConvertParameter(p));
                    }
                }
            }
            decl.Name       = "__DebuggerStub__";
            decl.ReturnType = builder.ConvertType(member.ReturnType);
            decl.Modifiers  = unresolvedMember.IsStatic ? Modifiers.Static : Modifiers.None;
            // Make the method look like an explicit interface implementation so that it doesn't appear in CC
            decl.PrivateImplementationType = new SimpleType("__DummyType__");
            decl.Body = GenerateBodyFromContext(builder, context);
            return(WrapInType(unresolvedMember.DeclaringTypeDefinition, decl).ToString());
        }
Esempio n. 2
0
        static string GeneratePartialClassContextStub(ICodeContext context)
        {
            var member = context.CurrentMember;

            if (member == null)
            {
                return("");
            }
            var builder = new TypeSystemAstBuilder();
            MethodDeclaration decl;

            if (member is IMethod)
            {
                // If it's a method, convert it directly (including parameters + type parameters)
                decl = (MethodDeclaration)builder.ConvertEntity(member);
            }
            else
            {
                // Otherwise, create a method anyways, and copy the parameters
                decl = new MethodDeclaration();
                if (member is IParameterizedMember)
                {
                    foreach (var p in ((IParameterizedMember)member).Parameters)
                    {
                        decl.Parameters.Add(builder.ConvertParameter(p));
                    }
                }
            }
            decl.Name       = "__DebuggerStub__";
            decl.ReturnType = builder.ConvertType(member.ReturnType);
            decl.Modifiers  = member.IsStatic ? Modifiers.Static : Modifiers.None;
            // Make the method look like an explicit interface implementation so that it doesn't appear in CC
            decl.PrivateImplementationType = new SimpleType("__DummyType__");
            decl.Body = GenerateBodyFromContext(builder, context.LocalVariables.ToArray());
            return(WrapInType(context.CurrentTypeDefinition, decl).ToString());
        }