View Javadoc
1   /*
2    * Copyright (C) 2014, 2020 Andrey Loskutov <loskutov@gmx.de> and others
3    *
4    * This program and the accompanying materials are made available under the
5    * terms of the Eclipse Distribution License v. 1.0 which is available at
6    * https://www.eclipse.org/org/documents/edl-v10.php.
7    *
8    * SPDX-License-Identifier: BSD-3-Clause
9    */
10  package org.eclipse.jgit.ignore;
11  
12  import org.eclipse.jgit.annotations.NonNull;
13  import org.eclipse.jgit.errors.InvalidPatternException;
14  import org.eclipse.jgit.ignore.internal.PathMatcher;
15  
16  /**
17   * Generic path matcher.
18   *
19   * @since 5.7
20   */
21  public interface IMatcher {
22  
23  	/**
24  	 * Matcher that does not match any pattern.
25  	 */
26  	public static final IMatcher.html#IMatcher">IMatcher NO_MATCH = new IMatcher() {
27  
28  		@Override
29  		public boolean matches(String path, boolean assumeDirectory,
30  				boolean pathMatch) {
31  			return false;
32  		}
33  
34  		@Override
35  		public boolean matches(String segment, int startIncl, int endExcl) {
36  			return false;
37  		}
38  	};
39  
40  	/**
41  	 * Creates a path matcher for the given pattern. A pattern may contain the
42  	 * wildcards "?", "*", and "**". The directory separator is '/'.
43  	 *
44  	 * @param pattern
45  	 *            to match
46  	 * @param dirOnly
47  	 *            whether to match only directories
48  	 * @return a matcher for the given pattern
49  	 * @throws InvalidPatternException
50  	 *             if the pattern is invalid
51  	 */
52  	@NonNull
53  	public static IMatcher createPathMatcher(@NonNull String pattern,
54  			boolean dirOnly) throws InvalidPatternException {
55  		return PathMatcher.createPathMatcher(pattern,
56  				Character.valueOf(FastIgnoreRule.PATH_SEPARATOR), dirOnly);
57  	}
58  
59  	/**
60  	 * Matches entire given string
61  	 *
62  	 * @param path
63  	 *            string which is not null, but might be empty
64  	 * @param assumeDirectory
65  	 *            true to assume this path as directory (even if it doesn't end
66  	 *            with a slash)
67  	 * @param pathMatch
68  	 *            {@code true} if the match is for the full path: prefix-only
69  	 *            matches are not allowed
70  	 * @return true if this matcher pattern matches given string
71  	 */
72  	boolean matches(String path, boolean assumeDirectory, boolean pathMatch);
73  
74  	/**
75  	 * Matches only part of given string
76  	 *
77  	 * @param segment
78  	 *            string which is not null, but might be empty
79  	 * @param startIncl
80  	 *            start index, inclusive
81  	 * @param endExcl
82  	 *            end index, exclusive
83  	 * @return true if this matcher pattern matches given string
84  	 */
85  	boolean matches(String segment, int startIncl, int endExcl);
86  }