Beispiel #1
0
        public override bool IsAvailable(IUserDataHolder cache)
        {
            var testProjectProvider = ComponentResolver.GetComponent <ITestProjectProvider>(_dataProvider);

            _parameterProvider = ComponentResolver.GetComponent <IParameterProvider>(_dataProvider);
            _selectedElement   = _dataProvider.GetSelectedElement <IObjectCreationExpression>(false, false);
            _block             = _dataProvider.GetSelectedElement <IBlock>();
            _classBody         = _dataProvider.GetSelectedElement <IClassBody>();
            _classDeclaration  = _classBody?.GetContainingTypeDeclaration() as IClassLikeDeclaration;

            if (_classDeclaration == null || _block == null || _selectedElement == null)
            {
                return(false);
            }

            if (!(_selectedElement.TypeReference?.Resolve().DeclaredElement is IClass c))
            {
                return(false);
            }

            _parameterNumber = _selectedElement.ArgumentList.Arguments.Count(x => x.Kind != ParameterKind.UNKNOWN);
            _constructor     = c.Constructors.ToArray().FirstOrDefault(x => !x.IsParameterless && x.Parameters.Count > _parameterNumber);
            if (_constructor == null)
            {
                return(false);
            }

            return(testProjectProvider.IsTestProject(_dataProvider.PsiModule));
        }
        private static IEnumerable <IMethod> GetMethodsAndProperties(IClassBody classBody)
        {
            var methods = classBody.Methods.Select(m => m.DeclaredElement);

            var properties =
                classBody.Properties
                .SelectMany(p => new[] { p.DeclaredElement.Getter, p.DeclaredElement.Setter })
                .Where(m => m != null);

            return(methods.Concat(properties));
        }
        public Dictionary <string, string> GetClassFields(IClassBody classBody, PsiLanguageType languageType)
        {
            var dic    = new Dictionary <string, string>();
            var fields = classBody.FieldDeclarations.Select(x => x.TypeUsage.FirstChild as IReferenceName).Where(x => x != null && x.ShortName == "Mock").ToArray();

            foreach (var referenceName in fields)
            {
                var types    = referenceName.TypeArguments.Select(x => x.GetPresentableName(languageType, DeclaredElementPresenterTextStyles.Empty).Text);
                var strType  = string.Join(",", types);
                var mockType = GetGenericMock(strType);
                var field    = (IFieldDeclaration)referenceName.Parent.NextSibling.NextSibling;

                if (!dic.ContainsKey(mockType))
                {
                    dic.Add(mockType, field.DeclaredName);
                }
            }

            return(dic);
        }
Beispiel #4
0
        protected override Action <ITextControl> ExecutePsiTransaction(ISolution solution, IProgressIndicator progress)
        {
            IMethodDeclaration method_declaration = this.provider.GetSelectedElement <IMethodDeclaration>();

            if (method_declaration == null)
            {
                return(null);
            }

            String start_begin_s     = "Begin";
            String start_return_s    = "End";
            String start_exception_s = default;
            String start_throw_s     = "Throw";

            IClassBody class_body = default;

            if (method_declaration.Parent is IClassBody class_body_local)
            {
                class_body = class_body_local;
                if (class_body_local.Parent is IClassDeclaration class_declaration)
                {
                    foreach (IAttribute attribute in class_declaration.Attributes)
                    {
                        if (attribute.Name.GetText() == "AddingLogging")
                        {
                            foreach (IPropertyAssignment property_assignment in attribute.PropertyAssignments)
                            {
                                switch (property_assignment.PropertyNameIdentifier.Name)
                                {
                                case "BeginCode":
                                {
                                    if (property_assignment.Source is ICSharpLiteralExpression literal_expression)
                                    {
                                        start_begin_s = literal_expression.Literal.GetText().Replace(oldValue: "\"", newValue: default);
                                    }
                                }
                                break;
Beispiel #5
0
 public IClassBody SetBody(IClassBody param)
 {
     return(_classDeclaration.SetBody(param));
 }
        public override bool IsAvailable(IUserDataHolder cache)
        {
            var testProjectProvider = ComponentResolver.GetComponent <ITestProjectProvider>(_dataProvider);

            if (!testProjectProvider.IsTestProject(_dataProvider.PsiModule))
            {
                return(false);
            }

            _csharpMemberProvider = ComponentResolver.GetComponent <ICsharpMemberProvider>(_dataProvider);
            _selectedElement      = _dataProvider.GetSelectedElement <IObjectCreationExpression>(false, false);
            _block            = _dataProvider.GetSelectedElement <IBlock>();
            _classBody        = _dataProvider.GetSelectedElement <IClassBody>();
            _classDeclaration = _classBody?.GetContainingTypeDeclaration() as IClassLikeDeclaration;

            if (_classDeclaration == null || _block == null || _selectedElement == null)
            {
                return(false);
            }

            if (!(_selectedElement.TypeReference?.Resolve().DeclaredElement is IClass c))
            {
                return(false);
            }

            var parameterCount = _selectedElement.ArgumentList?.Arguments.Count(x => x.Kind != ParameterKind.UNKNOWN);

            _constructor = c.Constructors.ToArray().FirstOrDefault(x => !x.IsParameterless && x.Parameters.Count > parameterCount);
            if (_constructor == null)
            {
                return(false);
            }

            var previousTokenType = _dataProvider.TokenBeforeCaret?.NodeType as ITokenNodeType;
            var nextTokenType     = _dataProvider.TokenAfterCaret?.NodeType as ITokenNodeType;

            if (previousTokenType == null || nextTokenType == null)
            {
                return(false);
            }

            if (previousTokenType.TokenRepresentation == " ")
            {
                previousTokenType = _dataProvider.PsiFile.FindTokenAt(_dataProvider.TokenBeforeCaret.GetTreeStartOffset() - 1)?.NodeType as ITokenNodeType;
            }

            if (nextTokenType.TokenRepresentation == " ")
            {
                nextTokenType = _dataProvider.PsiFile.FindTokenAt(_dataProvider.TokenBeforeCaret.GetTreeEndOffset() + 1)?.NodeType as ITokenNodeType;
            }

            if (previousTokenType == null || nextTokenType == null)
            {
                return(false);
            }

            var isAvailable = false;

            if (previousTokenType.TokenRepresentation == "(")
            {
                isAvailable = nextTokenType.TokenRepresentation == ")" || nextTokenType.TokenRepresentation == ",";
            }

            else if (previousTokenType.TokenRepresentation == ",")
            {
                isAvailable = !nextTokenType.IsIdentifier;
            }

            if (!isAvailable)
            {
                return(false);
            }

            _parameterNumber = _csharpMemberProvider.GetCurrentParameterNumber(_selectedElement, _dataProvider);
            var parameter = _constructor.Parameters[_parameterNumber];

            if (!_csharpMemberProvider.IsAbstractOrInterface(parameter))
            {
                return(false);
            }

            cache.PutKey(AnchorKey.FillParamWithMockContextActionKey);

            return(true);
        }
        private static IEnumerable<IMethod> GetMethodsAndProperties(IClassBody classBody)
        {
            var methods = classBody.Methods.Select(m => m.DeclaredElement);

            var properties =
                classBody.Properties
                    .SelectMany(p => new[] {p.DeclaredElement.Getter, p.DeclaredElement.Setter})
                    .Where(m => m != null);

            return methods.Concat(properties);
        }