XmlTag (final XmlTag[] tags, final String specialName, final String name, final XmlTag rootTag, final XmlNSDescriptorImpl descriptor, final HashSet<XmlTag> visited) { for (XmlTag tag : tags) { if (equalsToSchemaName(tag, specialName)) { String attribute = tag.getAttributeValue("name"); if (name.equals(attribute) || name.contains(":") && name.substring(name.indexOf(":") + 1).equals(attribute)) { return tag; } } else if (equalsToSchemaName(tag, INCLUDE_TAG_NAME) || ( equalsToSchemaName(tag, IMPORT_TAG_NAME) && rootTag.getNamespaceByPrefix( XmlUtil.findPrefixByQualifiedName(name) ).equals(tag.getAttributeValue("namespace")) ) ) { final String schemaLocation = tag.getAttributeValue("schemaLocation"); if (schemaLocation != null) { final XmlFile xmlFile = XmlUtil.findNamespace(rootTag.getContainingFile(), schemaLocation); if (xmlFile != null) { final XmlDocument document = xmlFile.getDocument(); if (document != null) { final XmlTag rTag = findSpecialTag(name, specialName, document.getRootTag(), descriptor, visited); if (rTag != null) return rTag; } } } } else if (equalsToSchemaName(tag, REDEFINE_TAG_NAME)) { XmlTag rTag = findSpecialTagIn(tag.getSubTags(), specialName, name, rootTag, descriptor, visited); if (rTag != null) return rTag; final XmlNSDescriptorImpl nsDescriptor = getRedefinedElementDescriptor(tag); if (nsDescriptor != null) { final XmlTag redefinedRootTag = ((XmlDocument)nsDescriptor.getDeclaration()).getRootTag(); rTag = findSpecialTagIn(redefinedRootTag.getSubTags(), specialName, name, redefinedRootTag, nsDescriptor, visited); if (rTag != null) return rTag; } } } return null; }