class Matcher extends InexactMatcher {
    Matcher(PropertyNameInfo propertyNameInfo) {
      super(propertyNameInfo);
    }

    boolean match() {<FILL_FUNCTION_BODY>}
  }

      Set<Integer> matchSources = new HashSet<Integer>();
      for (Tokens destTokens : propertyNameInfo.getDestinationPropertyTokens()) {
        for (int destTokenIndex = 0; destTokenIndex < destTokens.size();) {
          DestTokensMatcher matchedTokens = matchSourcePropertyName(destTokens, destTokenIndex);
          if (matchedTokens.match()) {
            destTokenIndex += matchedTokens.maxMatchTokens();
            matchSources.addAll(matchedTokens.matchSources());
          } else if (matchSourcePropertyType(destTokens.token(destTokenIndex))
              || matchSourceClass(destTokens.token(destTokenIndex)))
            destTokenIndex++;
          else
            return false;
        }
      }

      return matchSources.size() == sourceTokens.size();
    
<no_super_class>