package org.rubypeople.rdt.ui.text.ruby; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.rubypeople.rdt.core.CompletionProposal; import org.rubypeople.rdt.internal.ui.text.ruby.RubyContentAssistInvocationContext; public abstract class RubyCompletionProposalComputer implements IRubyCompletionProposalComputer { protected RubyContentAssistInvocationContext fContext; public List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) { if (!(context instanceof RubyContentAssistInvocationContext)) return Collections.EMPTY_LIST; fContext = (RubyContentAssistInvocationContext) context; CompletionProposalCollector collector = createCollector(fContext); List<CompletionProposal> proposals = doComputeCompletionProposals(fContext, monitor); for (CompletionProposal proposal : proposals) { collector.accept(proposal); } fContext = null; return Arrays.asList(collector.getRubyCompletionProposals()); } protected abstract List<CompletionProposal> doComputeCompletionProposals(RubyContentAssistInvocationContext context, IProgressMonitor monitor); public List computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) { return Collections.EMPTY_LIST; } public String getErrorMessage() { return null; } public void sessionEnded() { } public void sessionStarted() { } protected CompletionProposalCollector createCollector(RubyContentAssistInvocationContext context) { return new CompletionProposalCollector(context); } }