Exemple #1
0
        public void ProcessMembers(CSharpCodeCompletionContext context, GroupedItemsCollector collector, ISymbolTable symbols)
        {
            symbols.ForAllSymbolInfos(symbol =>
            {
                var member = symbol.GetDeclaredElement() as ITypeMember;
                if (member != null && member.GetElementType() == ExpectedMemberType)
                {
                    string nameArgument         = string.Format("\"{0}\"", symbol.ShortName);
                    var declaredElementInstance = new DeclaredElementInstance <ITypeMember>((ITypeMember)symbol.GetDeclaredElement(),
                                                                                            symbol.GetSubstitution());

                    if (!IncludeSymbol(declaredElementInstance))
                    {
                        return;
                    }


                    IList <string> arguments = new List <string>();

                    if (IncludeNameArgument)
                    {
                        arguments.Add(nameArgument);
                    }

                    if (NeedsBindingFlags(member))
                    {
                        arguments.Add(GetExpectedBindingFlags(member).GetFullString());
                    }

                    if (ShouldProvideMemberSpecificArguments(symbols.GetSymbolInfos(member.ShortName))) //additional arguments needs to be provided
                    {
                        ProvideMemberSpecificArguments(declaredElementInstance, arguments, NeedsBindingFlags(member));
                    }

                    ReflectionMemberLookupItem lookupItem;
                    if (member is IMethod && ((IMethod)member).TypeParameters.Count != 0)
                    {
                        lookupItem = new ReflectionGenericMethodLookupItem(symbol.ShortName,
                                                                           declaredElementInstance,
                                                                           context,
                                                                           context.BasicContext.LookupItemsOwner);
                    }
                    else
                    {
                        lookupItem = new ReflectionMemberLookupItem(symbol.ShortName,
                                                                    string.Join(", ", arguments.ToArray()),
                                                                    declaredElementInstance,
                                                                    context,
                                                                    context.BasicContext.LookupItemsOwner);
                    }



                    lookupItem.InitializeRanges(context.CompletionRanges, context.BasicContext);
                    lookupItem.OrderingString = string.Format("__A_MEMBER_{0}", symbol.ShortName); //
                    collector.AddToTop(lookupItem);
                }
            });
        }
Exemple #2
0
 private static void PrintType(CSharpCodeCompletionContext context, CompletionTargetMarker marker)
 {
     for (var node = context.NodeInFile; node != null; node = node.Parent)
     {
         var type = node as ITypeDeclaration;
         if (type != null)
         {
             JetbrainsTreeDebugger.Dump(type, marker);
             return;
         }
     }
 }
Exemple #3
0
        protected override bool AddLookupItems(CSharpCodeCompletionContext context, GroupedItemsCollector collector)
        {
            Action <Context> onSuccess = kaveContext =>
            {
                // TODO NameUpdate: untested addition (try/catch)
                try
                {
                    _currentQuery = _queryGen.Extract(kaveContext);
                }
                catch (Exception e)
                {
                    _logger.Error(e, "error while extracting query");
                    _currentQuery = null;
                }

                if (_currentQuery != null && IsAvailable())
                {
                    var rec = LoadIfAvailable();
                    if (rec != null)
                    {
                        try
                        {
                            var proposals = rec.Query(_currentQuery);

                            WrapExistingItems(collector, proposals);
                            WrapNewItems(collector, proposals);
                        }
                        catch (AssertException e)
                        {
                            _logger.Error(e);
                        }
                    }
                    else
                    {
                        _logger.Info("no recommender model found for {0}", _currentQuery.type);
                    }
                }
            };

            ContextAnalysis.Analyse(
                context.NodeInFile,
                null,
                _logger,
                onSuccess,
                delegate { },
                delegate { });

            return(base.AddLookupItems(context, collector));
        }
        protected override bool AddLookupItems(CSharpCodeCompletionContext context, IItemsCollector collector)
        {
            var identifier = context.TerminatedContext.TreeNode as IIdentifier;
            var expression = identifier.GetParentSafe <IReferenceExpression>();

            if (expression == null)
            {
                return(false);
            }

            if (!(expression.ConditionalQualifier is IInvocationExpression invocation))
            {
                return(false);
            }

            var solution         = context.BasicContext.Solution;
            var methodIdentifier = solution.GetComponent <IMoqMethodIdentifier>();

            if (methodIdentifier.IsMoqCallbackMethod(invocation))
            {
                invocation = invocation.InvokedExpression?.FirstChild as IInvocationExpression;
            }

            var mockedMethod = GetMockedMethodFromSetupMethod(solution, invocation);

            if (mockedMethod == null || mockedMethod.Parameters.Count == 0 || mockedMethod.ReturnType.IsVoid())
            {
                return(false);
            }

            var types            = GetMockedMethodParameterTypes(solution, invocation);
            var variablesName    = mockedMethod.Parameters.Select(p => p.ShortName);
            var proposedCallback = $"Returns<{string.Join(",", types)}>(({string.Join(",", variablesName)}) => )";

            var item = CSharpLookupItemFactory.Instance.CreateKeywordLookupItem(context,
                                                                                proposedCallback,
                                                                                TailType.None,
                                                                                PsiSymbolsThemedIcons.Method.Id);

            item.SetInsertCaretOffset(-1);
            item.SetReplaceCaretOffset(-1);
            item.WithInitializedRanges(context.CompletionRanges, context.BasicContext);
            item.SetTopPriority();
            collector.Add(item);

            return(true);
        }
Exemple #5
0
        protected override bool AddLookupItems(CSharpCodeCompletionContext context, IItemsCollector collector)
        {
            LastException = null;
            var analysisResult = ContextAnalysis.Analyze(context.NodeInFile, null, MockLogger());

            LastContext          = analysisResult.Context;
            LastEntryPoints      = analysisResult.EntryPoints;
            LastCompletionMarker = analysisResult.CompletionMarker;
            if (IsPrintingType)
            {
                PrintType(context, LastCompletionMarker);
            }


            LastSST = LastContext.SST;

            return(base.AddLookupItems(context, collector));
        }
Exemple #6
0
        public static TextLookupRanges EvaluateRanges([NotNull] this CSharpCodeCompletionContext context)
        {
            var basicContext = context.BasicContext;

            var startOffset = basicContext.CaretDocumentOffset;
            var endOffset   = basicContext.SelectedRange.EndOffset;

            if (basicContext.File.FindTokenAt(basicContext.CaretTreeOffset) is ITokenNode tokenNode &&
                tokenNode.IsAnyStringLiteral())
            {
                startOffset = tokenNode.GetDocumentStartOffset();
                endOffset   = tokenNode.GetDocumentEndOffset();
            }

            var replaceRange = new DocumentRange(startOffset, endOffset);

            return(new TextLookupRanges(replaceRange, replaceRange));
        }
Exemple #7
0
        public static bool IsInsideElement([NotNull] this CSharpCodeCompletionContext context, [NotNull] IClrTypeName typeName)
        {
            var nodeAt = context.BasicContext.File.FindNodeAt(context.BasicContext.CaretDocumentOffset);

            if (nodeAt?.Parent == null)
            {
                return(false);
            }

            var parentNode = nodeAt.Parent is ICSharpArgument ? nodeAt.Parent : nodeAt.Parent.Parent;
            var attribute  = (parentNode is ICSharpArgument csharpArgument ? csharpArgument.Parent : nodeAt.Parent) as IAttribute;

            if (attribute?.TypeReference?.Resolve().DeclaredElement is ITypeElement typeElement)
            {
                return(typeElement.GetClrName().Equals(typeName));
            }

            return(false);
        }
Exemple #8
0
 protected override bool AddLookupItems(CSharpCodeCompletionContext context, IItemsCollector collector)
 {
     collector.Add(CreateXamlLookupItem());
     return(true);
 }
Exemple #9
0
 protected override bool IsAvailable(CSharpCodeCompletionContext context)
 {
     return(Enabled);
 }
Exemple #10
0
 protected override bool IsAvailable(CSharpCodeCompletionContext context)
 {
     // necessary to cope wth Registry.Clear() in some test tear downs
     RefreshRegistration();
     return(true);
 }
        protected override bool IsAvailable(CSharpCodeCompletionContext context)
        {
            var codeCompletionType = context.BasicContext.CodeCompletionType;

            return(codeCompletionType == CodeCompletionType.SmartCompletion || codeCompletionType == CodeCompletionType.BasicCompletion);
        }
Exemple #12
0
 public ReflectionMemberLookupItem(string name, string code, DeclaredElementInstance instance, CSharpCodeCompletionContext context, ILookupItemsOwner owner)
     : base(name, instance, context, owner)
 {
     _code    = code;
     _context = context;
 }
Exemple #13
0
 public EnumCaseInfo([NotNull] DeclaredElementInstance instance, [NotNull] CSharpCodeCompletionContext context, bool isFlagsEnum, [NotNull] string caseValue)
     : base(instance.Element.ShortName, instance, context.BasicContext.LookupItemsOwner, context, context.BasicContext)
 {
     IsFlagsEnum = isFlagsEnum;
     CaseValue   = caseValue;
 }
Exemple #14
0
 protected override bool IsAvailable(CSharpCodeCompletionContext csContext)
 {
     return(base.IsAvailable(csContext));
 }
 public ReflectionGenericMethodLookupItem(string name, DeclaredElementInstance instance, CSharpCodeCompletionContext context, ILookupItemsOwner owner)
     : base(name, string.Empty, instance, context, owner)
 {
     _instance = instance;
 }