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}