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); }
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;
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); }