| /******************************************************************************* |
| * Copyright (c) 2009, 2019 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; |
| } |
| |
| } |