XPathType (XmlTag tag, String attribute) { if ("select".equals(attribute)) { final String tagName = tag.getLocalName(); if ("sequence".equals(tagName)) { final XPathType declaredType = XsltCodeInsightUtil.getDeclaredType(tag); if (declaredType != null) { return declaredType; } if (XsltSupport.isFunction(tag.getParentTag())) { final XsltFunction func = XsltElementFactory.getInstance().wrapElement(tag.getParentTag(), XsltFunction.class); return func.getReturnType(); } return XPath2Type.SEQUENCE; } else if ("value-of".equals(tagName) || "copy-of".equals(tagName) || "for-each".equals(tagName)) { return XPath2Type.SEQUENCE; } } else if ("group-by".equals(attribute)) { return XPath2Type.ITEM; } return super.getTypeForTag(tag, attribute); }