package com.xtremelabs.robolectric.res; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class StringArrayResourceLoader extends XpathResourceXmlLoader { Map stringArrayValues = new HashMap(); private StringResourceLoader stringResourceLoader; public StringArrayResourceLoader(ResourceExtractor resourceExtractor, StringResourceLoader stringResourceLoader) { super(resourceExtractor, "/resources/string-array"); this.stringResourceLoader = stringResourceLoader; } public String[] getArrayValue(int resourceId) { String resourceName = resourceExtractor.getResourceName(resourceId); return stringArrayValues.get(resourceName); } @Override protected void processNode(Node node, String name, boolean isSystem) throws XPathExpressionException { XPathExpression itemXPath = XPathFactory.newInstance().newXPath().compile("item"); NodeList childNodes = (NodeList) itemXPath.evaluate(node, XPathConstants.NODESET); List arrayValues = new ArrayList(); for (int j = 0; j < childNodes.getLength(); j++) { Node childNode = childNodes.item(j); String value = childNode.getTextContent(); if (value.startsWith("@")) { arrayValues.add(stringResourceLoader.getValue(value , isSystem)); } else { arrayValues.add(value); } } String valuePointer = (isSystem ? "android:" : "") + "array/" + name; stringArrayValues.put(valuePointer, arrayValues.toArray(new String[arrayValues.size()])); } }