/******************************************************************************* * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marc R. Hoffmann - initial API and implementation * Dominik Stadler - source folder support * *******************************************************************************/ package org.jacoco.ant; import java.util.Iterator; import org.apache.tools.ant.types.Resource; import org.apache.tools.ant.types.resources.FileResource; import org.jacoco.report.DirectorySourceFileLocator; import org.jacoco.report.MultiSourceFileLocator; /** * Source file locator based on Ant resources. The locator supports files as * well as directories. The lookup is first performed on files (matching the * local file name) and afterwards on directories, by the order the directory * resources have been added. The directories are considered as source folders * that are searched for source files with the fully qualified name (package and * local name). */ class AntResourcesLocator extends MultiSourceFileLocator { private final String encoding; private final AntFilesLocator filesLocator; private boolean empty; AntResourcesLocator(final String encoding, final int tabWidth) { super(tabWidth); this.encoding = encoding; this.filesLocator = new AntFilesLocator(encoding, tabWidth); this.empty = true; super.add(filesLocator); } /** * Adds the given file or directory resource to the locator. * * @param resource * resource to add */ void add(final Resource resource) { empty = false; if (resource.isDirectory()) { final FileResource dir = (FileResource) resource; super.add(new DirectorySourceFileLocator(dir.getFile(), encoding, getTabWidth())); } else { filesLocator.add(resource); } } void addAll(final Iterator<?> iterator) { while (iterator.hasNext()) { add((Resource) iterator.next()); } } /** * Checks, whether resources have been added. * * @return <code>true</code>, if no resources have been added */ boolean isEmpty() { return empty; } }