void (CompletionParameters parameters, CompletionResultSet result) { PsiElement element = parameters.getPosition(); if (!isXmlNameCompletion(parameters)) return; PsiElement parent = element.getParent(); if (!(parent instanceof XmlTag tag) || !(parameters.getOriginalFile() instanceof XmlFile)) { return; } result.stopHere(); final String namespace = tag.getNamespace(); final String prefix = result.getPrefixMatcher().getPrefix(); final int pos = prefix.indexOf(':'); final PsiReference reference = tag.getReference(); String namespacePrefix = tag.getNamespacePrefix(); if (reference != null && !namespace.isEmpty() && !namespacePrefix.isEmpty()) { // fallback to simple completion result.runRemainingContributors(parameters, true); } else { final CompletionResultSet newResult = result.withPrefixMatcher(pos >= 0 ? prefix.substring(pos + 1) : prefix); final XmlFile file = (XmlFile)parameters.getOriginalFile(); final List<XmlExtension.TagInfo> names = XmlExtension.getExtension(file).getAvailableTagNames(file, tag); for (XmlExtension.TagInfo info : names) { final LookupElement item = createLookupElement(info, info.namespace, namespacePrefix.isEmpty() ? null : namespacePrefix); newResult.addElement(item); } } }