void (XsltTemplateInvocation call, ProblemsHolder holder, boolean onTheFly) { final XsltWithParam[] arguments = call.getArguments(); final Map<String, XsltWithParam> argNames = new HashMap<>(); for (XsltWithParam arg : arguments) { final XmlAttribute attr = arg.getNameAttribute(); if (attr != null) { final String name = attr.getValue(); if (argNames.containsKey(name)) { final PsiElement token = arg.getNameIdentifier(); assert token != null; holder.registerProblem(token, XPathBundle.message("inspection.message.duplicate.argument", name)); } argNames.put(name, arg); } } if (call instanceof XsltCallTemplate ct) { final PsiElement nameToken = ct.getNameIdentifier(); final XsltTemplate template = ct.getTemplate(); if (template != null) { if (nameToken != null) { final XsltParameter[] parameters = template.getParameters(); for (XsltParameter parameter : parameters) { if (!argNames.containsKey(parameter.getName()) && !parameter.hasDefault()) { final LocalQuickFix fix = new AddWithParamFix(parameter, call.getTag()).createQuickFix(onTheFly); final String message = XPathBundle.message("inspection.message.missing.template.parameter", parameter.getName()); holder.registerProblem(nameToken, message, AbstractFix.createFixes(fix)); } } } for (String s : argNames.keySet()) { final XmlAttribute argAttribute = argNames.get(s).getNameAttribute(); assert argAttribute != null; final XmlAttributeValue valueElement = argAttribute.getValueElement(); final PsiElement valueToken = XsltSupport.getAttValueToken(argAttribute); if (valueToken != null && s.trim().length() > 0) { if (template.getParameter(s) == null) { final LocalQuickFix fix1 = new AddParameterFix(s, template).createQuickFix(onTheFly); final LocalQuickFix fix2 = new RemoveParamFix(argNames.get(s).getTag(), s).createQuickFix(onTheFly); holder.registerProblem(valueToken, XPathBundle.message("inspection.message.undeclared.template.parameter", s), ProblemHighlightType.LIKE_UNKNOWN_SYMBOL, AbstractFix.createFixes(fix1, fix2)); } } else if (valueElement != null) { holder.registerProblem(valueElement, XPathBundle.message("inspection.message.parameter.name.expected")); } } } } }