Should a ResourcePatternFilter that has a PatternType of ANY and a name of WILDCARD_RESOURCE not match any Acls? I think this is a bug.I am writing a series of tests to ensure that I have implemented everything correctly in the Trie implementation and this has come up.
public boolean matches(ResourcePattern pattern) { if (!resourceType.equals(ResourceType.ANY) && !resourceType.equals(pattern.resourceType())) { return false; } if (!patternType.equals(PatternType.ANY) && !patternType.equals(PatternType.MATCH) && !patternType.equals(pattern.patternType())) { return false; } if (name == null) { return true; } if (patternType.equals(PatternType.ANY) || patternType.equals(pattern.patternType())) { return name.equals(pattern.name()); } switch (pattern.patternType()) { case LITERAL: return name.equals(pattern.name()) || pattern.name().equals(WILDCARD_RESOURCE); case PREFIXED: return name.startsWith(pattern.name()); default: throw new IllegalArgumentException("Unsupported PatternType: " + pattern.patternType()); } } The above code is from the ResourcePatternFilter. The first if checks for resource type not matching. the second if checks for pattern type not matching. the third if will return true if the name is null. the fourth if will return true if the name matches in the case where pattern type is ANY or has equality. The only possible conditions here are ANY, MATCH or equality. the switch handles the case where the pattern type does not match.I think this can be simplified as: public boolean matches(ResourcePattern pattern) { if (!resourceType.equals(ResourceType.ANY) && !resourceType.equals(pattern.resourceType())) { return false; } switch (pattern.patternType()) { case UNKNOWN: return patternType.equals(pattern.patternType()); case ANY: case MATCH: return name == null || name.equals(pattern.name()) || pattern.name().equals(WILDCARD_RESOURCE) || name.equals(WILDCARD_RESOURCE); case LITERAL: return patternType.equals(pattern.patternType()) || name == null || name.equals(pattern.name()) || pattern.name().equals(WILDCARD_RESOURCE); case PREFIXED: return patternType.equals(pattern.patternType()) || name == null || name.startsWith(pattern.name()) || pattern.name().equals(WILDCARD_RESOURCE); default: throw new IllegalArgumentException("Unsupported PatternType: " + pattern.patternType()); } } The above case still handles the null name and handles the WILDCARD_RESOURCE as a valid pattern name. I also think it is simpler to read. Am I missing something?