@Override public void afterCheckFile(@NonNull Context context) { if (mIgnoreFile) { mFileAttributes = null; return; } if (mFileAttributes != null) { assert context instanceof XmlContext; // mFileAttributes is only set in XML files List<Attr> always = new ArrayList<Attr>(); List<Attr> ifRoom = new ArrayList<Attr>(); for (Attr attribute : mFileAttributes) { String value = attribute.getValue(); if (value.equals(VALUE_ALWAYS)) { always.add(attribute); } else if (value.equals(VALUE_IF_ROOM)) { ifRoom.add(attribute); } else if (value.indexOf('|') != -1) { String[] flags = value.split("\\|"); // $NON-NLS-1$ for (String flag : flags) { if (flag.equals(VALUE_ALWAYS)) { always.add(attribute); break; } else if (flag.equals(VALUE_IF_ROOM)) { ifRoom.add(attribute); break; } } } } if (!always.isEmpty() && mFileAttributes.size() > 1) { // Complain if you're using more than one "always", or if you're // using "always" and aren't using "ifRoom" at all (and provided you // have more than a single item) if (always.size() > 2 || ifRoom.isEmpty()) { XmlContext xmlContext = (XmlContext) context; Location location = null; for (int i = always.size() - 1; i >= 0; i--) { Location next = location; location = xmlContext.getLocation(always.get(i)); if (next != null) { location.setSecondary(next); } } if (location != null) { context.report(ISSUE, location, "Prefer \"`ifRoom`\" instead of \"`always`\""); } } } } }
@Override public void visitAttribute(@NonNull XmlContext context, @NonNull Attr attribute) { if (context.getDriver().isSuppressed(context, ISSUE, attribute)) { mIgnoreFile = true; return; } if (mFileAttributes == null) { mFileAttributes = new ArrayList<Attr>(); } mFileAttributes.add(attribute); }