in nuget-agent/src/jetbrains/buildServer/nuget/agent/util/fsScanner/Wildcard.java [26:79]
public boolean isMatch(@NotNull String str) {
String pattern = myPattern;
if (StringUtil.isEmptyOrSpaces(pattern))
return StringUtil.isEmptyOrSpaces(str);
if (!myCaseSensitive)
str = str.toLowerCase();
int patlen = pattern.length();
List<Integer> positions = new ArrayList<Integer>();
positions.add(0);
for (int j = 0; j < str.length(); j++) {
char c = str.charAt(j);
boolean hasPositionsToMatch = false;
int len = positions.size();
for (int i = 0; i < len; i++) {
int pat = positions.get(i);
if (pat >= patlen || pat < 0)
continue;
hasPositionsToMatch = true;
if (pattern.charAt(pat) == '*') {
if (pat == patlen - 1)
return true;
if (matchChars(pattern.charAt(pat + 1), c)) {
if (pat == patlen - 2 && j == str.length() - 1)
return true;
positions.add(pat + 2);
}
} else {
if (matchChars(pattern.charAt(pat), c)) {
if (pat == patlen - 1 && j == str.length() - 1)
return true;
positions.set(i, positions.get(i) + 1);
} else positions.set(i, -1);
}
}
if (!hasPositionsToMatch)
return false;
}
for (Integer x : positions) {
if (x == patlen - 1 && pattern.charAt(x) == '*')
return true;
}
return false;
}