code: public static List<RoboconfCompletionProposal> buildProposalsFromMap( Map<String,String> candidates, String prefix ) {
  
  		List<RoboconfCompletionProposal> result = new ArrayList<> ();
  		for( Map.Entry<String,String> entry : candidates.entrySet()) {
  
  			// Matching candidate?
  			String candidate = entry.getKey();
  			if( ! startsWith( candidate, prefix ))
  				continue;
  
  			// No description => basic proposal
  			if( Utils.isEmptyOrWhitespaces( entry.getValue())) {
  				result.add( basicProposal( candidate, prefix ));
  			}
  
  			// Otherwise, show the description
  			else {
  				result.add( new RoboconfCompletionProposal(
  						candidate,
  						candidate,
  						entry.getValue(),
  						prefix.length()));
  			}
  		}
  
  		return result;
  	}
docs: Builds proposals from a map (key = replacement, value = description).
  @param viewer the viewer
  @param candidates a non-null list of candidates
  @param prefix a non-null prefix
  @param offset the viewer's offset
  @return a non-null list of proposals