protected Collection<ICompletionProposal> getFuzzyCompletions(
     final IDocument doc, final int offset) {
   final String prefix = fuzzySearchPrefix.getPrefix(doc, offset);
   if (prefix != null) {
     Collection<Match<PropertyInfo>> matches = findMatches(prefix);
     if (matches != null && !matches.isEmpty()) {
       ArrayList<ICompletionProposal> proposals =
           new ArrayList<ICompletionProposal>(matches.size());
       for (final Match<PropertyInfo> match : matches) {
         ProposalApplier edits =
             new LazyProposalApplier() {
               @Override
               protected ProposalApplier create() throws Exception {
                 Type type = TypeParser.parse(match.data.getType());
                 DocumentEdits edits = new DocumentEdits(doc);
                 edits.delete(offset - prefix.length(), offset);
                 edits.insert(offset, match.data.getId() + propertyCompletionPostfix(type));
                 return edits;
               }
             };
         proposals.add(completionFactory.property(doc, edits, match, typeUtil));
       }
       return proposals;
     }
   }
   return Collections.emptyList();
 }