/// <remarks> /// Interface implementation members are private, they're not called from an object /// variable reference of the type of the procedure's class, and whether they're called or not, /// they have to be implemented anyway, so removing them would break the code. /// Best just ignore them. /// </remarks> private bool IsInterfaceMember(IEnumerable <Declaration> declarations, IEnumerable <Declaration> classes, Declaration procedure) { // get the procedure's parent module var enumerable = classes as IList <Declaration> ?? classes.ToList(); var parent = enumerable.Where(item => item.ProjectId == procedure.ProjectId) .SingleOrDefault(item => item.IdentifierName == procedure.ComponentName); if (parent == null) { return(false); } var interfaces = enumerable.Where(item => item.References.Any(reference => ParserRuleContextHelper.HasParent <VBAParser.ImplementsStmtContext>(reference.Context.Parent))); if (interfaces.Select(i => i.ComponentName).Contains(procedure.ComponentName)) { return(true); } var result = GetImplementedInterfaceMembers(declarations, enumerable, procedure.ComponentName) .Contains(procedure.IdentifierName); return(result); }
private IEnumerable <string> GetImplementedInterfaceMembers(IEnumerable <Declaration> declarations, IEnumerable <Declaration> classes, string componentName) { var interfaces = classes.Where(item => item.References.Any(reference => ParserRuleContextHelper.HasParent <VBAParser.ImplementsStmtContext>(reference.Context.Parent) && reference.QualifiedModuleName.Component.Name == componentName)); var members = interfaces.SelectMany(declarations.InScope) .Select(member => member.ComponentName + "_" + member.IdentifierName); return(members); }
private bool IsIndexExprContext(IdentifierReference usage) { var indexExpr = ParserRuleContextHelper.GetParent <VBAParser.IndexExprContext>(usage.Context); if (indexExpr == null) { return(false); } var argumentList = indexExpr.argumentList(); if (argumentList == null) { return(true); } return(!ParserRuleContextHelper.HasParent(usage.Context, argumentList)); }
private bool IsCallStmt(IdentifierReference usage) { var callStmt = ParserRuleContextHelper.GetParent <VBAParser.CallStmtContext>(usage.Context); if (callStmt == null) { return(false); } var argumentList = CallStatement.GetArgumentList(callStmt); if (argumentList == null) { return(true); } return(!ParserRuleContextHelper.HasParent(usage.Context, argumentList)); }
private bool IsTypeOfExpression(IdentifierReference usage) { return(ParserRuleContextHelper.HasParent <VBAParser.TypeofexprContext>(usage.Context)); }
private bool IsAddressOfCall(IdentifierReference usage) { return(ParserRuleContextHelper.HasParent <VBAParser.AddressOfExpressionContext>(usage.Context)); }