Ejemplo n.º 1
0
        public override IEnumerable <CodeAction> GetActions(RefactoringContext context)
        {
            var service = (CodeGenerationService)context.GetService(typeof(CodeGenerationService));

            if (service == null)
            {
                yield break;
            }

            var type = context.GetNode <AstType>();

            if (type == null || type.Role != Roles.BaseType)
            {
                yield break;
            }
            var state = context.GetResolverStateBefore(type);

            if (state.CurrentTypeDefinition == null)
            {
                yield break;
            }

            var resolveResult = context.Resolve(type);

            if (resolveResult.Type.Kind != TypeKind.Class || resolveResult.Type.GetDefinition() == null || !resolveResult.Type.GetDefinition().IsAbstract)
            {
                yield break;
            }

            var toImplement = CollectMembersToImplement(state.CurrentTypeDefinition, resolveResult.Type);

            if (toImplement.Count == 0)
            {
                yield break;
            }

            yield return(new CodeAction(
                             context.TranslateString("Implement abstract members"),
                             script => script.InsertWithCursor(
                                 context.TranslateString("Implement abstract members"),
                                 state.CurrentTypeDefinition, (s, c) => ImplementInterfaceAction.GenerateImplementation(c, toImplement.Select(m => Tuple.Create(m, false)), true)
                                 .Select(entity => {
                var decl = entity as EntityDeclaration;
                if (decl != null)
                {
                    decl.Modifiers |= Modifiers.Override;
                }
                return entity;
            }).ToList()), type));
        }
        public override IEnumerable <CodeAction> GetActions(RefactoringContext context)
        {
            var service = (CodeGenerationService)context.GetService(typeof(CodeGenerationService));

            if (service == null)
            {
                yield break;
            }

            var type = context.GetNode <AstType>();

            if (type == null || type.Role != Roles.BaseType)
            {
                yield break;
            }
            var state = context.GetResolverStateBefore(type);

            if (state.CurrentTypeDefinition == null)
            {
                yield break;
            }

            var resolveResult = context.Resolve(type);

            if (resolveResult.Type.Kind != TypeKind.Interface)
            {
                yield break;
            }

            bool interfaceMissing;
            var  toImplement = ImplementInterfaceAction.CollectMembersToImplement(
                state.CurrentTypeDefinition,
                resolveResult.Type,
                false,
                out interfaceMissing
                );

            if (toImplement.Count == 0)
            {
                yield break;
            }

            yield return(new CodeAction(context.TranslateString("Implement interface explicit"), script =>
                                        script.InsertWithCursor(
                                            context.TranslateString("Implement Interface"),
                                            state.CurrentTypeDefinition,
                                            (s, c) => ImplementInterfaceAction.GenerateImplementation(c, toImplement.Select(t => Tuple.Create(t.Item1, true)), interfaceMissing).ToList()
                                            )
                                        , type));
        }