use of org.intellij.lang.xpath.xslt.quickfix.AddWithParamFix in project intellij-community by JetBrains.
the class TemplateInvocationInspection method checkTemplateInvocation.
private static void checkTemplateInvocation(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, "Duplicate Argument '" + name + "'");
}
argNames.put(name, arg);
}
}
if (call instanceof XsltCallTemplate) {
final XsltCallTemplate ct = ((XsltCallTemplate) call);
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);
holder.registerProblem(nameToken, "Missing template parameter: " + parameter.getName(), 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, "Undeclared template parameter: " + s, ProblemHighlightType.LIKE_UNKNOWN_SYMBOL, AbstractFix.createFixes(fix1, fix2));
}
} else if (valueElement != null) {
holder.registerProblem(valueElement, "Parameter name expected");
}
}
}
}
}
Aggregations