001/*
002  Copyright 2010-2016 Boxfuse GmbH
003  <p/>
004  Licensed under the Apache License, Version 2.0 (the "License");
005  you may not use this file except in compliance with the License.
006  You may obtain a copy of the License at
007  <p/>
008  http://www.apache.org/licenses/LICENSE-2.0
009  <p/>
010  Unless required by applicable law or agreed to in writing, software
011  distributed under the License is distributed on an "AS IS" BASIS,
012  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013  See the License for the specific language governing permissions and
014  limitations under the License.
015 */
016package io.avaje.classpath.scanner.internal;
017
018import io.avaje.classpath.scanner.core.Location;
019import io.avaje.classpath.scanner.ClassFilter;
020import io.avaje.classpath.scanner.ResourceFilter;
021import io.avaje.classpath.scanner.Resource;
022
023import java.util.List;
024
025/**
026 * Scanner for both resources and classes.
027 */
028public interface ResourceAndClassScanner {
029  /**
030   * Scans the classpath for resources under the specified location, starting with the specified prefix and ending with
031   * the specified suffix.
032   *
033   * @param location  The location in the classpath to start searching. Subdirectories are also searched.
034   * @param predicate The predicate used to match the resource names.
035   * @return The resources that were found.
036   */
037  List<Resource> scanForResources(Location location, ResourceFilter predicate);
038
039  /**
040   * Scans the classpath for concrete classes under the specified package implementing this interface.
041   * Non-instantiable abstract classes are filtered out.
042   *
043   * @param location  The location (package) in the classpath to start scanning.
044   *                  Subpackages are also scanned.
045   * @param predicate The predicate used to match against scanned classes.
046   * @return The non-abstract classes that were found.
047   */
048  List<Class<?>> scanForClasses(Location location, ClassFilter predicate);
049}