/** * @param type Type of the expression leading upto the 'nav' operator * @param navOffset Offset of the nav operator (either ']' or '.' * @param offset Offset of the cursor where CA was requested. * @return */ private Collection<ICompletionProposal> getNavigationProposals( IDocument doc, Type type, int navOffset, int offset) { try { char navOp = doc.getChar(navOffset); if (navOp == '.') { String prefix = doc.get(navOffset + 1, offset - (navOffset + 1)); EnumCaseMode caseMode = caseMode(prefix); List<TypedProperty> objectProperties = typeUtil.getProperties(type, caseMode, BeanPropertyNameMode.HYPHENATED); // Note: properties editor itself deals with relaxed names. So it expects the properties // here to be returned in hyphenated form only. if (objectProperties != null && !objectProperties.isEmpty()) { ArrayList<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>(); for (TypedProperty prop : objectProperties) { double score = FuzzyMatcher.matchScore(prefix, prop.getName()); if (score != 0) { Type valueType = prop.getType(); String postFix = propertyCompletionPostfix(valueType); DocumentEdits edits = new DocumentEdits(doc); edits.delete(navOffset + 1, offset); edits.insert(offset, prop.getName() + postFix); proposals.add(completionFactory.simpleProposal(prop.getName(), score, edits)); } } return proposals; } } else { // TODO: other cases ']' or '[' ? } } catch (Exception e) { BootActivator.log(e); } return Collections.emptyList(); }