Java Code Examples for org.w3c.dom.Element#hasAttributeNS()

The following examples show how to use org.w3c.dom.Element#hasAttributeNS() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: SAX2DOMEx.java    From openjdk-8-source with GNU General Public License v2.0 6 votes vote down vote up
protected void namespace(Element element, String prefix, String uri) {
    String qname;
    if ("".equals(prefix) || prefix == null) {
        qname = "xmlns";
    } else {
        qname = "xmlns:" + prefix;
    }

    // older version of Xerces (I confirmed that the bug is gone with Xerces 2.4.0)
    // have a problem of re-setting the same namespace attribute twice.
    // work around this bug removing it first.
    if (element.hasAttributeNS("http://www.w3.org/2000/xmlns/", qname)) {
        // further workaround for an old Crimson bug where the removeAttribtueNS
        // method throws NPE when the element doesn't have any attribute.
        // to be on the safe side, check the existence of attributes before
        // attempting to remove it.
        // for details about this bug, see org.apache.crimson.tree.ElementNode2
        // line 540 or the following message:
        // https://jaxb.dev.java.net/servlets/ReadMsg?list=users&msgNo=2767
        element.removeAttributeNS("http://www.w3.org/2000/xmlns/", qname);
    }
    // workaround until here

    element.setAttributeNS("http://www.w3.org/2000/xmlns/", qname, uri);
}
 
Example 2
Source File: DomDocumentImpl.java    From camunda-bpm-platform with Apache License 2.0 6 votes vote down vote up
protected String getUnusedGenericNsPrefix() {
  synchronized(document) {
    Element documentElement = document.getDocumentElement();
    if (documentElement == null) {
      return GENERIC_NS_PREFIX + "0";
    }
    else {
      for (int i = 0; i < Integer.MAX_VALUE; i++) {
        if (!documentElement.hasAttributeNS(XMLNS_ATTRIBUTE_NS_URI, GENERIC_NS_PREFIX + i)) {
          return GENERIC_NS_PREFIX + i;
        }
      }
      throw new ModelException("Unable to find an unused namespace prefix");
    }
  }
}
 
Example 3
Source File: Documents.java    From ttt with BSD 2-Clause "Simplified" License 6 votes vote down vote up
public static String getAttribute(Element e, QName qn, String defaultValue) {
    String ns       = qn.getNamespaceURI();
    String ln       = qn.getLocalPart();
    String value;
    if ((ns == null) || (ns.length() == 0)) {
        if (e.hasAttribute(ln))
            value = e.getAttribute(ln);
        else
            value = defaultValue;
    } else {
        if (e.hasAttributeNS(ns, ln))
            value = e.getAttributeNS(ns, ln);
        else
            value = defaultValue;
    }
    return value;
}
 
Example 4
Source File: SAX2DOMEx.java    From openjdk-jdk8u-backup with GNU General Public License v2.0 6 votes vote down vote up
protected void namespace(Element element, String prefix, String uri) {
    String qname;
    if ("".equals(prefix) || prefix == null) {
        qname = "xmlns";
    } else {
        qname = "xmlns:" + prefix;
    }

    // older version of Xerces (I confirmed that the bug is gone with Xerces 2.4.0)
    // have a problem of re-setting the same namespace attribute twice.
    // work around this bug removing it first.
    if (element.hasAttributeNS("http://www.w3.org/2000/xmlns/", qname)) {
        // further workaround for an old Crimson bug where the removeAttribtueNS
        // method throws NPE when the element doesn't have any attribute.
        // to be on the safe side, check the existence of attributes before
        // attempting to remove it.
        // for details about this bug, see org.apache.crimson.tree.ElementNode2
        // line 540 or the following message:
        // https://jaxb.dev.java.net/servlets/ReadMsg?list=users&msgNo=2767
        element.removeAttributeNS("http://www.w3.org/2000/xmlns/", qname);
    }
    // workaround until here

    element.setAttributeNS("http://www.w3.org/2000/xmlns/", qname, uri);
}
 
Example 5
Source File: AbstractBindingBuilder.java    From steady with Apache License 2.0 6 votes vote down vote up
protected String findIDFromSamlToken(Element samlToken) {
    String id = null;
    if (samlToken != null) {
        QName elName = DOMUtils.getElementQName(samlToken);
        if (elName.equals(new QName(WSConstants.SAML_NS, "Assertion"))
            && samlToken.hasAttributeNS(null, "AssertionID")) {
            id = samlToken.getAttributeNS(null, "AssertionID");
        } else if (elName.equals(new QName(WSConstants.SAML2_NS, "Assertion"))
            && samlToken.hasAttributeNS(null, "ID")) {
            id = samlToken.getAttributeNS(null, "ID");
        }
        if (id == null) {
            id = samlToken.getAttributeNS(WSConstants.WSU_NS, "Id");
        }
    }
    return id;
}
 
Example 6
Source File: SAX2DOMEx.java    From jdk8u60 with GNU General Public License v2.0 6 votes vote down vote up
protected void namespace(Element element, String prefix, String uri) {
    String qname;
    if ("".equals(prefix) || prefix == null) {
        qname = "xmlns";
    } else {
        qname = "xmlns:" + prefix;
    }

    // older version of Xerces (I confirmed that the bug is gone with Xerces 2.4.0)
    // have a problem of re-setting the same namespace attribute twice.
    // work around this bug removing it first.
    if (element.hasAttributeNS("http://www.w3.org/2000/xmlns/", qname)) {
        // further workaround for an old Crimson bug where the removeAttribtueNS
        // method throws NPE when the element doesn't have any attribute.
        // to be on the safe side, check the existence of attributes before
        // attempting to remove it.
        // for details about this bug, see org.apache.crimson.tree.ElementNode2
        // line 540 or the following message:
        // https://jaxb.dev.java.net/servlets/ReadMsg?list=users&msgNo=2767
        element.removeAttributeNS("http://www.w3.org/2000/xmlns/", qname);
    }
    // workaround until here

    element.setAttributeNS("http://www.w3.org/2000/xmlns/", qname, uri);
}
 
Example 7
Source File: AccessibilityDetector.java    From javaide with GNU General Public License v3.0 6 votes vote down vote up
@Override
public void visitElement(@NonNull XmlContext context, @NonNull Element element) {
    if (!element.hasAttributeNS(ANDROID_URI, ATTR_CONTENT_DESCRIPTION)) {
        // Ignore views that are explicitly not important for accessibility
        if (VALUE_NO.equals(element.getAttributeNS(ANDROID_URI,
                ATTR_IMPORTANT_FOR_ACCESSIBILITY))) {
            return;
        }
        context.report(ISSUE, element, context.getLocation(element),
                "[Accessibility] Missing `contentDescription` attribute on image");
    } else {
        Attr attributeNode = element.getAttributeNodeNS(ANDROID_URI, ATTR_CONTENT_DESCRIPTION);
        String attribute = attributeNode.getValue();
        if (attribute.isEmpty() || attribute.equals("TODO")) { //$NON-NLS-1$
            context.report(ISSUE, attributeNode, context.getLocation(attributeNode),
                    "[Accessibility] Empty `contentDescription` attribute on image");
        }
    }
}
 
Example 8
Source File: LintDriver.java    From javaide with GNU General Public License v3.0 5 votes vote down vote up
/**
 * Returns whether the given issue is suppressed in the given XML DOM node.
 *
 * @param issue the issue to be checked, or null to just check for "all"
 * @param node the DOM node containing the issue
 * @return true if there is a suppress annotation covering the specific
 *         issue in this class
 */
public boolean isSuppressed(@Nullable XmlContext context, @NonNull Issue issue,
        @Nullable org.w3c.dom.Node node) {
    if (node instanceof Attr) {
        node = ((Attr) node).getOwnerElement();
    }
    boolean checkComments = mClient.checkForSuppressComments()
            && context != null && context.containsCommentSuppress();
    while (node != null) {
        if (node.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
            Element element = (Element) node;
            if (element.hasAttributeNS(TOOLS_URI, ATTR_IGNORE)) {
                String ignore = element.getAttributeNS(TOOLS_URI, ATTR_IGNORE);
                if (ignore.indexOf(',') == -1) {
                    if (matches(issue, ignore)) {
                        return true;
                    }
                } else {
                    for (String id : ignore.split(",")) { //$NON-NLS-1$
                        if (matches(issue, id)) {
                            return true;
                        }
                    }
                }
            } else if (checkComments && context.isSuppressedWithComment(node, issue)) {
                return true;
            }
        }

        node = node.getParentNode();
    }

    return false;
}
 
Example 9
Source File: IssuedTokenInterceptorProvider.java    From steady with Apache License 2.0 5 votes vote down vote up
private String getIdFromToken(Element token) {
    if (token != null) {
        // Try to find the "Id" on the token.
        if (token.hasAttributeNS(WSConstants.WSU_NS, "Id")) {
            return token.getAttributeNS(WSConstants.WSU_NS, "Id");
        } else if (token.hasAttributeNS(null, "ID")) {
            return token.getAttributeNS(null, "ID");
        } else if (token.hasAttributeNS(null, "AssertionID")) {
            return token.getAttributeNS(null, "AssertionID");
        }
    }
    return "";
}
 
Example 10
Source File: Kramerius4Export.java    From proarc with GNU General Public License v3.0 5 votes vote down vote up
/**
 * Removes all subelements with xsi:nil attribute as they are worthless.
 *
 * JAXB optimizes namespace declarations and moves them to common parent elements
 * but Fedora ingest ignores it. Then some ingested datastreams may be broken
 * as they miss optimized namespace declarations (xsi in this case).
 */
public static void removeNils(Element elm) {
    NodeList children = elm.getChildNodes();
    for (int i = children.getLength() - 1; i >= 0; i--) {
        Node item = children.item(i);
        if (item.getNodeType() == Node.ELEMENT_NODE) {
            Element itemElm = (Element) item;
            if (itemElm.hasAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "nil")) {
                itemElm.getParentNode().removeChild(item);
            } else {
                removeNils(itemElm);
            }
        }
    }
}
 
Example 11
Source File: OverdrawDetector.java    From javaide with GNU General Public License v3.0 5 votes vote down vote up
@Override
public void visitElement(@NonNull XmlContext context, @NonNull Element element) {
    String tag = element.getTagName();
    if (tag.equals(TAG_STYLE)) {
        scanTheme(element);
    } else if (tag.equals(TAG_ACTIVITY)) {
        scanActivity(context, element);
    } else if (tag.equals(TAG_APPLICATION)) {
        if (element.hasAttributeNS(ANDROID_URI, ATTR_THEME)) {
            mManifestTheme = element.getAttributeNS(ANDROID_URI, ATTR_THEME);
        }
    } else if (tag.equals(TAG_BITMAP)) {
        scanBitmap(context, element);
    }
}
 
Example 12
Source File: Html5ElementStack.java    From caja with Apache License 2.0 5 votes vote down vote up
private static boolean hasSpecifiedAttributes(Element el) {
  NamedNodeMap attrs = el.getAttributes();
  for (int i = 0, n = attrs.getLength(); i < n; ++i) {
    Attr a = (Attr) attrs.item(i);
    if (el.hasAttributeNS(a.getNamespaceURI(), a.getLocalName())) {
      return true;
    }
  }
  return false;
}
 
Example 13
Source File: OverrideProcessor.java    From vespa with Apache License 2.0 4 votes vote down vote up
private boolean hasInstance(Element element) {
    return element.hasAttributeNS(XmlPreProcessor.deployNamespaceUri, INSTANCE_ATTRIBUTE);
}
 
Example 14
Source File: XMLUtils.java    From openjdk-jdk9 with GNU General Public License v2.0 4 votes vote down vote up
/**
 * This is the work horse for {@link #circumventBug2650}.
 *
 * @param node
 * @see <A HREF="http://nagoya.apache.org/bugzilla/show_bug.cgi?id=2650">
 * Namespace axis resolution is not XPath compliant </A>
 */
@SuppressWarnings("fallthrough")
private static void circumventBug2650internal(Node node) {
    Node parent = null;
    Node sibling = null;
    final String namespaceNs = Constants.NamespaceSpecNS;
    do {
        switch (node.getNodeType()) {
        case Node.ELEMENT_NODE :
            Element element = (Element) node;
            if (!element.hasChildNodes()) {
                break;
            }
            if (element.hasAttributes()) {
                NamedNodeMap attributes = element.getAttributes();
                int attributesLength = attributes.getLength();

                for (Node child = element.getFirstChild(); child!=null;
                    child = child.getNextSibling()) {

                    if (child.getNodeType() != Node.ELEMENT_NODE) {
                        continue;
                    }
                    Element childElement = (Element) child;

                    for (int i = 0; i < attributesLength; i++) {
                        Attr currentAttr = (Attr) attributes.item(i);
                        if (!namespaceNs.equals(currentAttr.getNamespaceURI())) {
                            continue;
                        }
                        if (childElement.hasAttributeNS(namespaceNs,
                                                        currentAttr.getLocalName())) {
                            continue;
                        }
                        childElement.setAttributeNS(namespaceNs,
                                                    currentAttr.getName(),
                                                    currentAttr.getNodeValue());
                    }
                }
            }
        case Node.ENTITY_REFERENCE_NODE :
        case Node.DOCUMENT_NODE :
            parent = node;
            sibling = node.getFirstChild();
            break;
        }
        while ((sibling == null) && (parent != null)) {
            sibling = parent.getNextSibling();
            parent = parent.getParentNode();
        }
        if (sibling == null) {
            return;
        }

        node = sibling;
        sibling = node.getNextSibling();
    } while (true);
}
 
Example 15
Source File: XMLUtils.java    From jdk8u-jdk with GNU General Public License v2.0 4 votes vote down vote up
/**
 * This is the work horse for {@link #circumventBug2650}.
 *
 * @param node
 * @see <A HREF="http://nagoya.apache.org/bugzilla/show_bug.cgi?id=2650">
 * Namespace axis resolution is not XPath compliant </A>
 */
@SuppressWarnings("fallthrough")
private static void circumventBug2650internal(Node node) {
    Node parent = null;
    Node sibling = null;
    final String namespaceNs = Constants.NamespaceSpecNS;
    do {
        switch (node.getNodeType()) {
        case Node.ELEMENT_NODE :
            Element element = (Element) node;
            if (!element.hasChildNodes()) {
                break;
            }
            if (element.hasAttributes()) {
                NamedNodeMap attributes = element.getAttributes();
                int attributesLength = attributes.getLength();

                for (Node child = element.getFirstChild(); child!=null;
                    child = child.getNextSibling()) {

                    if (child.getNodeType() != Node.ELEMENT_NODE) {
                        continue;
                    }
                    Element childElement = (Element) child;

                    for (int i = 0; i < attributesLength; i++) {
                        Attr currentAttr = (Attr) attributes.item(i);
                        if (!namespaceNs.equals(currentAttr.getNamespaceURI())) {
                            continue;
                        }
                        if (childElement.hasAttributeNS(namespaceNs,
                                                        currentAttr.getLocalName())) {
                            continue;
                        }
                        childElement.setAttributeNS(namespaceNs,
                                                    currentAttr.getName(),
                                                    currentAttr.getNodeValue());
                    }
                }
            }
        case Node.ENTITY_REFERENCE_NODE :
        case Node.DOCUMENT_NODE :
            parent = node;
            sibling = node.getFirstChild();
            break;
        }
        while ((sibling == null) && (parent != null)) {
            sibling = parent.getNextSibling();
            parent = parent.getParentNode();
        }
        if (sibling == null) {
            return;
        }

        node = sibling;
        sibling = node.getNextSibling();
    } while (true);
}
 
Example 16
Source File: XMLUtils.java    From jdk8u60 with GNU General Public License v2.0 4 votes vote down vote up
/**
 * This is the work horse for {@link #circumventBug2650}.
 *
 * @param node
 * @see <A HREF="http://nagoya.apache.org/bugzilla/show_bug.cgi?id=2650">
 * Namespace axis resolution is not XPath compliant </A>
 */
@SuppressWarnings("fallthrough")
private static void circumventBug2650internal(Node node) {
    Node parent = null;
    Node sibling = null;
    final String namespaceNs = Constants.NamespaceSpecNS;
    do {
        switch (node.getNodeType()) {
        case Node.ELEMENT_NODE :
            Element element = (Element) node;
            if (!element.hasChildNodes()) {
                break;
            }
            if (element.hasAttributes()) {
                NamedNodeMap attributes = element.getAttributes();
                int attributesLength = attributes.getLength();

                for (Node child = element.getFirstChild(); child!=null;
                    child = child.getNextSibling()) {

                    if (child.getNodeType() != Node.ELEMENT_NODE) {
                        continue;
                    }
                    Element childElement = (Element) child;

                    for (int i = 0; i < attributesLength; i++) {
                        Attr currentAttr = (Attr) attributes.item(i);
                        if (!namespaceNs.equals(currentAttr.getNamespaceURI())) {
                            continue;
                        }
                        if (childElement.hasAttributeNS(namespaceNs,
                                                        currentAttr.getLocalName())) {
                            continue;
                        }
                        childElement.setAttributeNS(namespaceNs,
                                                    currentAttr.getName(),
                                                    currentAttr.getNodeValue());
                    }
                }
            }
        case Node.ENTITY_REFERENCE_NODE :
        case Node.DOCUMENT_NODE :
            parent = node;
            sibling = node.getFirstChild();
            break;
        }
        while ((sibling == null) && (parent != null)) {
            sibling = parent.getNextSibling();
            parent = parent.getParentNode();
        }
        if (sibling == null) {
            return;
        }

        node = sibling;
        sibling = node.getNextSibling();
    } while (true);
}
 
Example 17
Source File: DocumentMetadataHandle.java    From java-client-api with Apache License 2.0 4 votes vote down vote up
private void receivePropertiesImpl(Document document) {
  DocumentProperties properties = getProperties();
  properties.clear();

  if (document == null)
    return;

  Node propertyContainer = document.getElementsByTagNameNS(PROPERTY_API_NS, "properties").item(0);
  if (propertyContainer == null)
    return;

  NodeList propertiesIn = propertyContainer.getChildNodes();
  for (int i=0; i < propertiesIn.getLength(); i++) {
    Node node = propertiesIn.item(i);
    if (node.getNodeType() != Node.ELEMENT_NODE)
      continue;
    Element property = (Element) node;

    QName propertyName = null;

    String namespaceURI = property.getNamespaceURI();
    if (namespaceURI != null) {
      String prefix    = property.getPrefix();
      if (prefix != null) {
        propertyName = new QName(namespaceURI, property.getLocalName(), prefix);
      } else {
        propertyName = new QName(namespaceURI, property.getTagName());
      }
    } else {
      propertyName = new QName(property.getTagName());
    }

    if (!property.hasChildNodes()) {
      properties.put(propertyName, (String) null);
      continue;
    }

    NodeList children = property.getChildNodes();
    boolean hasChildElements = false;
    int childCount = children.getLength();
    for (int j=0; j < childCount; j++) {
      Node child = children.item(j);
      if (child.getNodeType() == Node.ELEMENT_NODE) {
        hasChildElements = true;
        break;
      }
    }
    if (hasChildElements) {
      properties.put(propertyName, children);
      continue;
    }

    // TODO: casting known properties such as prop:last-modified

    String value = property.getTextContent();
    if (property.hasAttributeNS(
      XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "type")) {
      String type = property.getAttributeNS(
        XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "type");
      properties.put(propertyName, ValueConverter.convertToJava(type, value));
      continue;
    } else {
      properties.put(propertyName, value);
    }

    properties.put(propertyName, value);
  }
}
 
Example 18
Source File: LabelForDetector.java    From javaide with GNU General Public License v3.0 4 votes vote down vote up
@Override
public void afterCheckFile(@NonNull Context context) {
    if (mTextFields != null) {
        if (mLabels == null) {
            mLabels = Collections.emptySet();
        }

        for (Element element : mTextFields) {
            if (element.hasAttributeNS(ANDROID_URI, ATTR_HINT)) {
                continue;
            }
            String id = element.getAttributeNS(ANDROID_URI, ATTR_ID);
            boolean missing = true;
            if (mLabels.contains(id)) {
                missing = false;
            } else if (id.startsWith(NEW_ID_PREFIX)) {
                missing = !mLabels.contains(ID_PREFIX + stripIdPrefix(id));
            } else if (id.startsWith(ID_PREFIX)) {
                missing = !mLabels.contains(NEW_ID_PREFIX + stripIdPrefix(id));
            }

            if (missing) {
                XmlContext xmlContext = (XmlContext) context;
                Location location = xmlContext.getLocation(element);
                String message;
                if (id == null || id.isEmpty()) {
                    message = "No label views point to this text field with a " +
                            "`labelFor` attribute";
                } else {
                    message = String.format("No label views point to this text field with " +
                            "an `android:labelFor=\"@+id/%1$s\"` attribute", id);
                }
                xmlContext.report(ISSUE, element, location, message);
            }

        }
    }

    mLabels = null;
    mTextFields = null;
}
 
Example 19
Source File: XMLUtils.java    From hottub with GNU General Public License v2.0 4 votes vote down vote up
/**
 * This is the work horse for {@link #circumventBug2650}.
 *
 * @param node
 * @see <A HREF="http://nagoya.apache.org/bugzilla/show_bug.cgi?id=2650">
 * Namespace axis resolution is not XPath compliant </A>
 */
@SuppressWarnings("fallthrough")
private static void circumventBug2650internal(Node node) {
    Node parent = null;
    Node sibling = null;
    final String namespaceNs = Constants.NamespaceSpecNS;
    do {
        switch (node.getNodeType()) {
        case Node.ELEMENT_NODE :
            Element element = (Element) node;
            if (!element.hasChildNodes()) {
                break;
            }
            if (element.hasAttributes()) {
                NamedNodeMap attributes = element.getAttributes();
                int attributesLength = attributes.getLength();

                for (Node child = element.getFirstChild(); child!=null;
                    child = child.getNextSibling()) {

                    if (child.getNodeType() != Node.ELEMENT_NODE) {
                        continue;
                    }
                    Element childElement = (Element) child;

                    for (int i = 0; i < attributesLength; i++) {
                        Attr currentAttr = (Attr) attributes.item(i);
                        if (!namespaceNs.equals(currentAttr.getNamespaceURI())) {
                            continue;
                        }
                        if (childElement.hasAttributeNS(namespaceNs,
                                                        currentAttr.getLocalName())) {
                            continue;
                        }
                        childElement.setAttributeNS(namespaceNs,
                                                    currentAttr.getName(),
                                                    currentAttr.getNodeValue());
                    }
                }
            }
        case Node.ENTITY_REFERENCE_NODE :
        case Node.DOCUMENT_NODE :
            parent = node;
            sibling = node.getFirstChild();
            break;
        }
        while ((sibling == null) && (parent != null)) {
            sibling = parent.getNextSibling();
            parent = parent.getParentNode();
        }
        if (sibling == null) {
            return;
        }

        node = sibling;
        sibling = node.getNextSibling();
    } while (true);
}
 
Example 20
Source File: TextViewDetector.java    From javaide with GNU General Public License v3.0 4 votes vote down vote up
@Override
public void visitElement(@NonNull XmlContext context, @NonNull Element element) {
    if (element.getTagName().equals(TEXT_VIEW)) {
        if (!element.hasAttributeNS(ANDROID_URI, ATTR_TEXT)
                && element.hasAttributeNS(ANDROID_URI, ATTR_ID)
                && !element.hasAttributeNS(ANDROID_URI, ATTR_TEXT_IS_SELECTABLE)
                && !element.hasAttributeNS(ANDROID_URI, ATTR_VISIBILITY)
                && !element.hasAttributeNS(ANDROID_URI, ATTR_ON_CLICK)
                && context.getMainProject().getTargetSdk() >= 11
                && context.isEnabled(SELECTABLE)) {
            context.report(SELECTABLE, element, context.getLocation(element),
                    "Consider making the text value selectable by specifying " +
                    "`android:textIsSelectable=\"true\"`");
        }
    }

    NamedNodeMap attributes = element.getAttributes();
    for (int i = 0, n = attributes.getLength(); i < n; i++) {
        Attr attribute = (Attr) attributes.item(i);
        String name = attribute.getLocalName();
        if (name == null || name.isEmpty()) {
            // Attribute not in a namespace; we only care about the android: ones
            continue;
        }

        boolean isEditAttribute = false;
        switch (name.charAt(0)) {
            case 'a': {
                isEditAttribute = name.equals(ATTR_AUTO_TEXT);
                break;
            }
            case 'b': {
                isEditAttribute = name.equals(ATTR_BUFFER_TYPE) &&
                        attribute.getValue().equals(VALUE_EDITABLE);
                break;
            }
            case 'p': {
                isEditAttribute = name.equals(ATTR_PASSWORD)
                        || name.equals(ATTR_PHONE_NUMBER)
                        || name.equals(ATTR_PRIVATE_IME_OPTIONS);
                break;
            }
            case 'c': {
                isEditAttribute = name.equals(ATTR_CAPITALIZE)
                        || name.equals(ATTR_CURSOR_VISIBLE);
                break;
            }
            case 'd': {
                isEditAttribute = name.equals(ATTR_DIGITS);
                break;
            }
            case 'e': {
                if (name.equals(ATTR_EDITABLE)) {
                    isEditAttribute = attribute.getValue().equals(VALUE_TRUE);
                } else {
                    isEditAttribute = name.equals(ATTR_EDITOR_EXTRAS);
                }
                break;
            }
            case 'i': {
                if (name.equals(ATTR_INPUT_TYPE)) {
                    String value = attribute.getValue();
                    isEditAttribute = !value.isEmpty() && !value.equals(VALUE_NONE);
                } else {
                    isEditAttribute = name.equals(ATTR_INPUT_TYPE)
                            || name.equals(ATTR_IME_OPTIONS)
                            || name.equals(ATTR_IME_ACTION_LABEL)
                            || name.equals(ATTR_IME_ACTION_ID)
                            || name.equals(ATTR_INPUT_METHOD);
                }
                break;
            }
            case 'n': {
                isEditAttribute = name.equals(ATTR_NUMERIC);
                break;
            }
        }

        if (isEditAttribute && ANDROID_URI.equals(attribute.getNamespaceURI()) && context.isEnabled(ISSUE)) {
            Location location = context.getLocation(attribute);
            String message;
            String view = element.getTagName();
            if (view.equals(TEXT_VIEW)) {
                message = String.format(
                        "Attribute `%1$s` should not be used with `<TextView>`: " +
                        "Change element type to `<EditText>` ?", attribute.getName());
            } else {
                message = String.format(
                        "Attribute `%1$s` should not be used with `<%2$s>`: " +
                        "intended for editable text widgets",
                        attribute.getName(), view);
            }
            context.report(ISSUE, attribute, location, message);
        }
    }
}