private static boolean isOnDemand()

in analyzer/src/main/java/com/android/tools/sizereduction/analyzer/model/Project.java [88:120]


  private static boolean isOnDemand(File manifestFile) {
    try (FileInputStream inputStream = new FileInputStream(manifestFile)) {
      XMLInputFactory factory = XMLInputFactory.newInstance();
      XMLEventReader eventReader = factory.createXMLEventReader(inputStream);

      while (eventReader.hasNext() && !eventReader.peek().isEndDocument()) {
        XMLEvent event = eventReader.nextTag();
        if (event.isStartElement()) {
          StartElement startElement = event.asStartElement();
          if (startElement.getName().getNamespaceURI().equals(DIST_URI)
              && Ascii.equalsIgnoreCase(startElement.getName().getLocalPart(), "module")) {
            Attribute onDemand = startElement.getAttributeByName(new QName(DIST_URI, "onDemand"));
            if (onDemand != null) {
              boolean isOnDemand =
                  onDemand.getValue().equals(VALUE_TRUE) || onDemand.getValue().equals(VALUE_1);
              eventReader.close();
              return isOnDemand;
            }
          }
        } else if (event.isEndElement()
            && Ascii.equalsIgnoreCase(((EndElement) event).getName().getLocalPart(), "manifest")) {
          break;
        }
      }
      eventReader.close();
    } catch (XMLStreamException | IOException e) {
      System.out.println(
          "Warning: Failed to parse android manifest " + manifestFile.getAbsolutePath());
      // assume that it is not an onDemand project rather than throwing an exception.
    }

    return false;
  }