if (ellipsisCount == 0) {
if (nameLength != patternLength) {
return FuzzyBoolean.NO;
}
FuzzyBoolean finalReturn = FuzzyBoolean.YES;
while (patternIndex < patternLength) {
ResolvedType t = types.getResolved(nameIndex);
FuzzyBoolean ret = null;
try {
if (parameterAnnotations != null) {
t.temporaryAnnotationTypes = parameterAnnotations[nameIndex];
}
ret = typePatterns[patternIndex].matches(t, kind);
} finally {
t.temporaryAnnotationTypes = null;
}
patternIndex++;
nameIndex++;
if (ret == FuzzyBoolean.NO) {
return ret;
}
if (ret == FuzzyBoolean.MAYBE) {
finalReturn = ret;
}
}
return finalReturn;
} else if (ellipsisCount == 1) {
if (nameLength < patternLength - 1) {
return FuzzyBoolean.NO;
}
FuzzyBoolean finalReturn = FuzzyBoolean.YES;
while (patternIndex < patternLength) {
TypePattern p = typePatterns[patternIndex++];
if (p == TypePattern.ELLIPSIS) {
nameIndex = nameLength - (patternLength - patternIndex);
} else {
ResolvedType t = types.getResolved(nameIndex);
FuzzyBoolean ret = null;
try {
if (parameterAnnotations != null) {
t.temporaryAnnotationTypes = parameterAnnotations[nameIndex];
}
ret = p.matches(t, kind);
} finally {
t.temporaryAnnotationTypes = null;
}
nameIndex++;
if (ret == FuzzyBoolean.NO) {
return ret;
}
if (ret == FuzzyBoolean.MAYBE) {
finalReturn = ret;
}
}
}
return finalReturn;
} else {
// System.err.print("match(" + arguments + ", " + types + ") -> ");
FuzzyBoolean b = outOfStar(typePatterns, types, 0, 0, patternLength - ellipsisCount, nameLength, ellipsisCount, kind,
parameterAnnotations);
// System.err.println(b);
return b;
}
}