public override object VisitMethod_declaration([NotNull] CSharpParser.Method_declarationContext context) { if (_isControllerClass.Peek()) { bool isNonAction = false; bool isPublic = false; var attributes = context.method_header()?.attributes()?.attribute_section(); if (attributes != null) { foreach (var attributeSection in attributes) { foreach (var attribute in attributeSection.attribute_list().attribute()) { if (attribute.GetText() == "NonAction") { isNonAction = true; } } } } var modifiers = context.method_header()?.method_modifier(); if (modifiers != null) { foreach (var modifier in modifiers) { if (modifier.GetText() == Keywords.Public) { isPublic = true; } } } if (!isNonAction && isPublic) { // Add endpoint info to results var currentNamespace = GetCurrentNamespace(); var currentClass = GetCurrentClass(); var controllerRootName = GetControllerRootName(currentClass); var actionName = context.method_header().member_name().identifier().GetText(); bool?hasId = false; var fixedParams = context.method_header()?.formal_parameter_list() ?.fixed_parameters()?.fixed_parameter(); if (fixedParams != null) { foreach (var fixedParam in fixedParams) { if (Regex.Match(fixedParam?.type_()?.GetText(), @"^int\??$").Success && fixedParam?.identifier()?.GetText() == "id") { hasId = true; } } } if (ControllerDict.NamespaceDict.ContainsKey(currentNamespace) && ControllerDict.NamespaceDict[currentNamespace] .ClassDict.ContainsKey(currentClass) && ControllerDict.NamespaceDict[currentNamespace] .ClassDict[currentClass].ActionDict.ContainsKey(actionName)) { if (!Regex.Match( context.method_body().GetText(), @"ViewData\[""BreadcrumbNode""\]\s*=").Success) { var preMethodWhitespace = Tokens.GetHiddenTokensToLeft( context.Start.TokenIndex, Lexer.Hidden); int tabLevels = 1 + ((preMethodWhitespace?.Count ?? 0) > 0 ? _stringUtilService.CalculateTabLevels( preMethodWhitespace[0]?.Text ?? string.Empty, _tabString) : 0); int openBraceIndex = context.method_body()?.block()?.OPEN_BRACE().Symbol.TokenIndex ?? -1; if (openBraceIndex > -1) { var assignmentString = _breadcrumbCommandParserService.GenerateBreadcrumbAssignment( controllerRootName, actionName, hasId, tabLevels, _tabString); SetIsClassModifiedToTrue(); IsModified = true; Rewriter.InsertAfter(openBraceIndex, assignmentString); } } } } } VisitChildren(context); return(null); }