1 /*******************************************************************************
2 * Copyright (c) 2007, 2011 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package org.eclipse.jdt.internal.ui.text.java;
13 import java.util.ArrayList;
14 import java.util.Arrays;
15 import java.util.Collections;
16 import java.util.List;
18 import org.eclipse.core.runtime.IProgressMonitor;
20 import org.eclipse.jface.text.contentassist.ICompletionProposal;
21 import org.eclipse.jface.text.contentassist.IContextInformation;
23 import org.eclipse.jdt.core.ICompilationUnit;
25 import org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext;
26 import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
27 import org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer;
28 import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
30 import org.eclipse.jdt.internal.ui.text.template.contentassist.TemplateEngine;
31 import org.eclipse.jdt.internal.ui.text.template.contentassist.TemplateProposal;
35 * An template completion proposal computer can generate template completion proposals
36 * from a given TemplateEngine.
38 * Subclasses must implement {@link #computeCompletionEngine(JavaContentAssistInvocationContext)}
42 public abstract class AbstractTemplateCompletionProposalComputer implements IJavaCompletionProposalComputer {
45 * The engine for the current session, if any
47 private TemplateEngine fEngine;
50 * @see org.eclipse.jface.text.contentassist.ICompletionProposalComputer#computeCompletionProposals(org.eclipse.jface.text.contentassist.TextContentAssistInvocationContext, org.eclipse.core.runtime.IProgressMonitor)
52 public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
53 if (!(context instanceof JavaContentAssistInvocationContext))
54 return Collections.emptyList();
56 JavaContentAssistInvocationContext javaContext= (JavaContentAssistInvocationContext) context;
57 ICompilationUnit unit= javaContext.getCompilationUnit();
59 return Collections.emptyList();
61 fEngine= computeCompletionEngine(javaContext);
63 return Collections.emptyList();
66 fEngine.complete(javaContext.getViewer(), javaContext.getInvocationOffset(), unit);
68 TemplateProposal[] templateProposals= fEngine.getResults();
69 List<ICompletionProposal> result= new ArrayList<ICompletionProposal>(Arrays.asList(templateProposals));
71 IJavaCompletionProposal[] keyWordResults= javaContext.getKeywordProposals();
72 if (keyWordResults.length == 0)
75 /* Update relevance of template proposals that match with a keyword
76 * give those templates slightly more relevance than the keyword to
79 for (int k= 0; k < templateProposals.length; k++) {
80 TemplateProposal curr= templateProposals[k];
81 curr.generated_5688875060909217458(keyWordResults);
87 * Compute the engine used to retrieve completion proposals in the given context
89 * @param context the context where proposals will be made
90 * @return the engine or <code>null</code> if no engine available in the context
92 protected abstract TemplateEngine computeCompletionEngine(JavaContentAssistInvocationContext context);
95 * @see org.eclipse.jface.text.contentassist.ICompletionProposalComputer#computeContextInformation(org.eclipse.jface.text.contentassist.TextContentAssistInvocationContext, org.eclipse.core.runtime.IProgressMonitor)
97 public List<IContextInformation> computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
98 return Collections.emptyList();
102 * @see org.eclipse.jface.text.contentassist.ICompletionProposalComputer#getErrorMessage()
104 public String getErrorMessage() {
109 * @see org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer#sessionStarted()
111 public void sessionStarted() {
115 * @see org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer#sessionEnded()
117 public void sessionEnded() {
118 if (fEngine != null) {