private Element findOuterScrollingWidget(Node node, boolean vertical) { Collection<String> applicableElements = getApplicableElements(); while (node != null) { if (node instanceof Element) { Element element = (Element) node; String tagName = element.getTagName(); if (applicableElements.contains(tagName) && vertical == isVerticalScroll(element)) { return element; } } node = node.getParentNode(); } return null; }
@Override public void visitElement(Context context, Element element) { boolean vertical = isVerticalScroll(element); if (vertical) { mVisitingVerticalScroll++; } else { mVisitingHorizontalScroll++; } if (mVisitingHorizontalScroll > 1 || mVisitingVerticalScroll > 1) { Element parent = findOuterScrollingWidget(element.getParentNode(), vertical); if (parent != null) { String format; if (mVisitingVerticalScroll > 1) { format = "The vertically scrolling %1$s should not contain another " + "vertically scrolling widget (%2$s)"; } else { format = "The horizontally scrolling %1$s should not contain another " + "horizontally scrolling widget (%2$s)"; } String msg = String.format(format, parent.getTagName(), element.getTagName()); context.client.report(context, ISSUE, context.getLocation(element), msg, null); } } }
@Override public void visitElementAfter(Context context, Element element) { if (isVerticalScroll(element)) { mVisitingVerticalScroll--; assert mVisitingVerticalScroll >= 0; } else { mVisitingHorizontalScroll--; assert mVisitingHorizontalScroll >= 0; } }
@Override public void visitElement(@NonNull XmlContext context, @NonNull Element element) { boolean vertical = isVerticalScroll(element); if (vertical) { mVisitingVerticalScroll++; } else { mVisitingHorizontalScroll++; } if (mVisitingHorizontalScroll > 1 || mVisitingVerticalScroll > 1) { Element parent = findOuterScrollingWidget(element.getParentNode(), vertical); if (parent != null) { String format; if (mVisitingVerticalScroll > 1) { format = "The vertically scrolling `%1$s` should not contain another " + "vertically scrolling widget (`%2$s`)"; } else { format = "The horizontally scrolling `%1$s` should not contain another " + "horizontally scrolling widget (`%2$s`)"; } String msg = String.format(format, parent.getTagName(), element.getTagName()); context.report(ISSUE, element, context.getLocation(element), msg); } } }
@Override public void visitElementAfter(@NonNull XmlContext context, @NonNull Element element) { if (isVerticalScroll(element)) { mVisitingVerticalScroll--; assert mVisitingVerticalScroll >= 0; } else { mVisitingHorizontalScroll--; assert mVisitingHorizontalScroll >= 0; } }
private Element findOuterScrollingWidget(Node node, boolean vertical) { Collection<String> applicableElements = getApplicableElements(); while (node != null) { if (node instanceof Element) { Element element = (Element) node; String tagName = element.getTagName(); if (applicableElements.contains(tagName) && vertical == isVerticalScroll(element)) { return element; } } node = node.getParentNode(); } return null; }
@Override public void visitElement(@NonNull XmlContext context, @NonNull Element element) { boolean vertical = isVerticalScroll(element); if (vertical) { mVisitingVerticalScroll++; } else { mVisitingHorizontalScroll++; } if (mVisitingHorizontalScroll > 1 || mVisitingVerticalScroll > 1) { Element parent = findOuterScrollingWidget(element.getParentNode(), vertical); if (parent != null) { String format; if (mVisitingVerticalScroll > 1) { format = "The vertically scrolling `%1$s` should not contain another " + "vertically scrolling widget (`%2$s`)"; } else { format = "The horizontally scrolling `%1$s` should not contain another " + "horizontally scrolling widget (`%2$s`)"; } String msg = String.format(format, parent.getTagName(), element.getTagName()); context.report(ISSUE, element, context.getLocation(element), msg); } } }
@Override public void visitElementAfter(@NonNull XmlContext context, @NonNull Element element) { if (isVerticalScroll(element)) { mVisitingVerticalScroll--; assert mVisitingVerticalScroll >= 0; } else { mVisitingHorizontalScroll--; assert mVisitingHorizontalScroll >= 0; } }
private Element findOuterScrollingWidget(Node node, boolean vertical) { Collection<String> applicableElements = getApplicableElements(); while (node != null) { if (node instanceof Element) { Element element = (Element) node; String tagName = element.getTagName(); if (applicableElements.contains(tagName) && vertical == isVerticalScroll(element)) { return element; } } node = node.getParentNode(); } return null; }