private void UpdateCondition(ParserRuleContext condition, IModuleRewriter rewriter) { if (condition.GetText().Contains(' ')) { rewriter.InsertBefore(condition.Start.TokenIndex, "Not ("); rewriter.InsertAfter(condition.Stop.TokenIndex, ")"); } else { rewriter.InsertBefore(condition.Start.TokenIndex, "Not "); } }
private void UpdateContext(VBAParser.IfStmtContext context, IModuleRewriter rewriter) { var elseBlock = context.elseBlock(); var elseIfBlock = context.elseIfBlock().FirstOrDefault(); if (BlockHasDeclaration(context.block())) { rewriter.InsertBefore(context.Start.TokenIndex, AdjustedBlockText(context.block())); } if (elseIfBlock != null) { rewriter.RemoveRange(context.IF().Symbol.TokenIndex, context.block()?.Stop.TokenIndex ?? context.endOfStatement().Stop.TokenIndex); rewriter.Replace(elseIfBlock.ELSEIF(), "If"); } else if (elseBlock != null) { if (!string.IsNullOrEmpty(context.block()?.GetText())) { rewriter.RemoveRange(context.block().Start.TokenIndex, elseBlock.ELSE().Symbol.TokenIndex); } else { rewriter.Remove(elseBlock.ELSE()); } Debug.Assert(context.booleanExpression().children.Count == 1); UpdateCondition((dynamic)context.booleanExpression().children[0], rewriter); } else { rewriter.Remove(context); } }
private static void AddByRefIdentifier(IModuleRewriter rewriter, VBAParser.ArgContext context) { if (context.BYREF() == null) { rewriter.InsertBefore(context.unrestrictedIdentifier().Start.TokenIndex, "ByRef "); } }
private void AdjustArgument(VBAParser.DictionaryAccessContext dictionaryAccessContext, IModuleRewriter rewriter) { var argumentContext = ArgumentContext(dictionaryAccessContext); rewriter.InsertBefore(argumentContext.Start.TokenIndex, "(\""); rewriter.InsertAfter(argumentContext.Stop.TokenIndex, "\")"); }
private void UpdateContext(VBAParser.ElseIfBlockContext context, IModuleRewriter rewriter) { if (BlockHasDeclaration(context.block())) { rewriter.InsertBefore(((VBAParser.IfStmtContext)context.Parent).Start.TokenIndex, AdjustedBlockText(context.block())); } rewriter.Remove(context); }
private static void MakePositionalArgumentNamed(ArgumentReference argumentReference, IModuleRewriter rewriter) { var parameterName = argumentReference.Declaration.IdentifierName; var insertionCode = $"{parameterName}:="; var argumentContext = argumentReference.Context; var insertionIndex = argumentContext.Start.TokenIndex; rewriter.InsertBefore(insertionIndex, insertionCode); }
public static void InsertAtEndOfFile(this IModuleRewriter rewriter, string content) { if (content == string.Empty) { return; } rewriter.InsertBefore(rewriter.TokenStream.Size - 1, content); }
private void AddField(IModuleRewriter rewriter, Declaration target) { var content = $"{Tokens.Private} {target.IdentifierName} {Tokens.As} {target.AsTypeName}\r\n"; var members = _state.DeclarationFinder.Members(target.QualifiedName.QualifiedModuleName) .Where(item => item.DeclarationType.HasFlag(DeclarationType.Member)) .OrderByDescending(item => item.Selection); var firstMember = members.FirstOrDefault(); rewriter.InsertBefore(firstMember?.Context.Start.TokenIndex ?? 0, content); }
private void AddField(IModuleRewriter rewriter, Declaration target) { var content = $"{Tokens.Private} {target.IdentifierName} {Tokens.As} {target.AsTypeName}{Environment.NewLine}"; var members = _declarationFinderProvider.DeclarationFinder .Members(target.QualifiedName.QualifiedModuleName, DeclarationType.Member) .OrderBy(item => item.Selection); var firstMember = members.FirstOrDefault(); rewriter.InsertBefore(firstMember?.Context.Start.TokenIndex ?? 0, content); }
private void InsertLocalVariableDeclarationAndAssignment(IModuleRewriter rewriter, Declaration target, string localIdentifier) { var localVariableDeclaration = $"{Environment.NewLine}{Tokens.Dim} {localIdentifier} {Tokens.As} {target.AsTypeName}{Environment.NewLine}"; var requiresAssignmentUsingSet = target.References.Any(refItem => VariableRequiresSetAssignmentEvaluator.RequiresSetAssignment(refItem, _parserState)); var localVariableAssignment = requiresAssignmentUsingSet ? $"Set {localIdentifier} = {target.IdentifierName}" : $"{localIdentifier} = {target.IdentifierName}"; rewriter.InsertBefore(((ParserRuleContext)target.Context.Parent).Stop.TokenIndex + 1, localVariableDeclaration + localVariableAssignment); }
public static void SetVariableVisiblity(this IModuleRewriter rewriter, Declaration element, string visibility) { if (!element.IsVariable()) { throw new ArgumentException(); } var variableStmtContext = element.Context.GetAncestor <VBAParser.VariableStmtContext>(); var visibilityContext = variableStmtContext.GetChild <VBAParser.VisibilityContext>(); if (visibilityContext != null) { rewriter.Replace(visibilityContext, visibility); return; } rewriter.InsertBefore(element.Context.Start.TokenIndex, $"{visibility} "); }
private void InsertAfterLastModuleAttribute(IModuleRewriter rewriter, QualifiedModuleName module, string codeToAdd) { var moduleParseTree = (ParserRuleContext)_parseTreeProvider.GetParseTree(module, CodeKind.AttributesCode); var lastModuleAttribute = moduleParseTree.GetDescendents <VBAParser.ModuleAttributesContext>() .Where(moduleAttributes => moduleAttributes.attributeStmt() != null) .SelectMany(moduleAttributes => moduleAttributes.attributeStmt()) .OrderBy(moduleAttribute => moduleAttribute.stop.TokenIndex) .LastOrDefault(); if (lastModuleAttribute == null) { //This should never happen for a real module. var codeToInsert = codeToAdd + Environment.NewLine; rewriter.InsertBefore(0, codeToInsert); } else { var codeToInsert = Environment.NewLine + codeToAdd; rewriter.InsertAfter(lastModuleAttribute.stop.TokenIndex, codeToInsert); } }
private static void SetPrivateVariableVisiblity(IReadOnlyCollection <IEncapsulateFieldCandidate> fields, IModuleRewriter rewriter) { var visibility = Accessibility.Private.TokenString(); foreach (var element in fields.Where(f => !f.Declaration.HasPrivateAccessibility()).Select(f => f.Declaration)) { if (!element.IsVariable()) { throw new ArgumentException(); } var variableStmtContext = element.Context.GetAncestor <VBAParser.VariableStmtContext>(); var visibilityContext = variableStmtContext.GetChild <VBAParser.VisibilityContext>(); if (visibilityContext != null) { rewriter.Replace(visibilityContext, visibility); continue; } rewriter.InsertBefore(element.Context.Start.TokenIndex, $"{visibility} "); } }
private void AddProperty(IModuleRewriter rewriter) { UpdateReferences(); SetFieldToPrivate(rewriter); var members = _model.State.DeclarationFinder .Members(_model.TargetDeclaration.QualifiedName.QualifiedModuleName) .OrderBy(declaration => declaration.QualifiedSelection); var fields = members.Where(d => d.DeclarationType == DeclarationType.Variable && !d.ParentScopeDeclaration.DeclarationType.HasFlag(DeclarationType.Member)).ToList(); var property = Environment.NewLine + Environment.NewLine + GetPropertyText(); if (members.Any(m => m.DeclarationType.HasFlag(DeclarationType.Member))) { property += Environment.NewLine; } if (_model.TargetDeclaration.Accessibility != Accessibility.Private) { var newField = $"Private {_model.TargetDeclaration.IdentifierName} As {_model.TargetDeclaration.AsTypeName}"; if (fields.Count > 1) { newField = Environment.NewLine + newField; } property = newField + property; } if (_model.TargetDeclaration.Accessibility == Accessibility.Private || fields.Count > 1) { rewriter.InsertAfter(fields.Last().Context.Stop.TokenIndex, property); } else { rewriter.InsertBefore(0, property); } }