/** * <copyright> * </copyright> * * */ package org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui; public class MtextCompletionProcessor implements org.eclipse.jface.text.contentassist.IContentAssistProcessor { private org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextResourceProvider resourceProvider; private org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.IMtextBracketHandlerProvider bracketHandlerProvider; public MtextCompletionProcessor(org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextResourceProvider resourceProvider, org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.IMtextBracketHandlerProvider bracketHandlerProvider) { this.resourceProvider = resourceProvider; this.bracketHandlerProvider = bracketHandlerProvider; } public org.eclipse.jface.text.contentassist.ICompletionProposal[] computeCompletionProposals(org.eclipse.jface.text.ITextViewer viewer, int offset) { org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextTextResource textResource = resourceProvider.getResource(); if (textResource == null) { return new org.eclipse.jface.text.contentassist.ICompletionProposal[0]; } String content = viewer.getDocument().get(); org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.MtextCodeCompletionHelper helper = new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.MtextCodeCompletionHelper(); org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.MtextCompletionProposal[] computedProposals = helper.computeCompletionProposals(textResource, content, offset); // call completion proposal post processor to allow for customizing the proposals org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.MtextProposalPostProcessor proposalPostProcessor = new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.MtextProposalPostProcessor(); java.util.List<org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.MtextCompletionProposal> computedProposalList = java.util.Arrays.asList(computedProposals); java.util.List<org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.MtextCompletionProposal> extendedProposalList = proposalPostProcessor.process(computedProposalList); if (extendedProposalList == null) { extendedProposalList = java.util.Collections.emptyList(); } java.util.List<org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.MtextCompletionProposal> finalProposalList = new java.util.ArrayList<org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.MtextCompletionProposal>(); for (org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.MtextCompletionProposal proposal : extendedProposalList) { if (proposal.getMatchesPrefix()) { finalProposalList.add(proposal); } } org.eclipse.jface.text.contentassist.ICompletionProposal[] result = new org.eclipse.jface.text.contentassist.ICompletionProposal[finalProposalList.size()]; int i = 0; for (org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.MtextCompletionProposal proposal : finalProposalList) { String proposalString = proposal.getInsertString(); String displayString = proposal.getDisplayString(); String prefix = proposal.getPrefix(); org.eclipse.swt.graphics.Image image = proposal.getImage(); org.eclipse.jface.text.contentassist.IContextInformation info; info = new org.eclipse.jface.text.contentassist.ContextInformation(image, proposalString, proposalString); int begin = offset - prefix.length(); int replacementLength = prefix.length(); // if a closing bracket was automatically inserted right before, we enlarge the // replacement length in order to overwrite the bracket. org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.IMtextBracketHandler bracketHandler = bracketHandlerProvider.getBracketHandler(); String closingBracket = bracketHandler.getClosingBracket(); if (bracketHandler.addedClosingBracket() && proposalString.endsWith(closingBracket)) { replacementLength += closingBracket.length(); } result[i++] = new org.eclipse.jface.text.contentassist.CompletionProposal(proposalString, begin, replacementLength, proposalString.length(), image, displayString, info, proposalString); } return result; } public org.eclipse.jface.text.contentassist.IContextInformation[] computeContextInformation(org.eclipse.jface.text.ITextViewer viewer, int offset) { return null; } public char[] getCompletionProposalAutoActivationCharacters() { return null; } public char[] getContextInformationAutoActivationCharacters() { return null; } public org.eclipse.jface.text.contentassist.IContextInformationValidator getContextInformationValidator() { return null; } public String getErrorMessage() { return null; } }