/******************************************************************************* * Copyright (c) 2000, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.wst.jsdt.internal.ui.refactoring.contentassist; import java.util.ArrayList; import java.util.Arrays; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.contentassist.IContentAssistSubjectControl; import org.eclipse.jface.contentassist.ISubjectControlContentAssistProcessor; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.eclipse.jface.text.contentassist.IContentAssistProcessor; import org.eclipse.jface.text.contentassist.IContextInformation; import org.eclipse.jface.text.contentassist.IContextInformationValidator; import org.eclipse.swt.graphics.Image; import org.eclipse.wst.jsdt.core.IJavaScriptElement; import org.eclipse.wst.jsdt.core.IPackageFragment; import org.eclipse.wst.jsdt.core.IPackageFragmentRoot; import org.eclipse.wst.jsdt.core.JavaScriptModelException; import org.eclipse.wst.jsdt.internal.ui.JavaScriptPlugin; import org.eclipse.wst.jsdt.internal.ui.JavaPluginImages; import org.eclipse.wst.jsdt.internal.ui.text.java.JavaCompletionProposal; import org.eclipse.wst.jsdt.internal.ui.viewsupport.ImageDescriptorRegistry; import org.eclipse.wst.jsdt.ui.PreferenceConstants; import org.eclipse.wst.jsdt.ui.text.java.CompletionProposalComparator; /** * TODO: this class is not used anywhere yet. * (ContentAssist should be added to all source folder dialog fields.) */ public class JavaPackageFragmentRootCompletionProcessor implements IContentAssistProcessor, ISubjectControlContentAssistProcessor { private static final ImageDescriptorRegistry IMAGE_DESC_REGISTRY= JavaScriptPlugin.getImageDescriptorRegistry(); private IPackageFragmentRoot fPackageFragmentRoot; private CompletionProposalComparator fComparator; private char[] fProposalAutoActivationSet; /** * Creates a <code>JavaPackageCompletionProcessor</code> to complete existing packages * in the context of <code>packageFragmentRoot</code>. * * @param packageFragmentRoot the context for package completion */ public JavaPackageFragmentRootCompletionProcessor(IPackageFragmentRoot packageFragmentRoot) { fPackageFragmentRoot= packageFragmentRoot; fComparator= new CompletionProposalComparator(); IPreferenceStore preferenceStore= JavaScriptPlugin.getDefault().getPreferenceStore(); String triggers= preferenceStore.getString(PreferenceConstants.CODEASSIST_AUTOACTIVATION_TRIGGERS_JAVA); fProposalAutoActivationSet = triggers.toCharArray(); } /*(non-Javadoc) * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(org.eclipse.jface.text.ITextViewer, int) */ public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int documentOffset) { Assert.isTrue(false, "ITextViewer not supported"); //$NON-NLS-1$ return null; } /* (non-Javadoc) * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeContextInformation(org.eclipse.jface.text.ITextViewer, int) */ public IContextInformation[] computeContextInformation(ITextViewer viewer, int documentOffset) { Assert.isTrue(false, "ITextViewer not supported"); //$NON-NLS-1$ return null; } /* * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getCompletionProposalAutoActivationCharacters() */ public char[] getCompletionProposalAutoActivationCharacters() { return fProposalAutoActivationSet; } /* * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationAutoActivationCharacters() */ public char[] getContextInformationAutoActivationCharacters() { return null; } /* * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getErrorMessage() */ public String getErrorMessage() { return null; } /* * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationValidator() */ public IContextInformationValidator getContextInformationValidator() { return null; //no context } /* * @see ISubjectControlContentAssistProcessor#computeContextInformation(IContentAssistSubjectControl, int) */ public IContextInformation[] computeContextInformation(IContentAssistSubjectControl contentAssistSubject, int documentOffset) { return null; } /* * @see ISubjectControlContentAssistProcessor#computeCompletionProposals(IContentAssistSubjectControl, int) */ public ICompletionProposal[] computeCompletionProposals(IContentAssistSubjectControl contentAssistSubjectControl, int documentOffset) { String input= contentAssistSubjectControl.getDocument().get(); ICompletionProposal[] proposals= createPackagesProposals(documentOffset, input); Arrays.sort(proposals, fComparator); return proposals; } private ICompletionProposal[] createPackagesProposals(int documentOffset, String input) { ArrayList proposals= new ArrayList(); String prefix= input.substring(0, documentOffset); try { IJavaScriptElement[] packageFragments= fPackageFragmentRoot.getChildren(); for (int i= 0; i < packageFragments.length; i++) { IPackageFragment pack= (IPackageFragment) packageFragments[i]; String packName= pack.getElementName(); if (packName.length() == 0 || ! packName.startsWith(prefix)) continue; Image image= getImage(JavaPluginImages.DESC_OBJS_PACKAGE); JavaCompletionProposal proposal= new JavaCompletionProposal(packName, 0, input.length(), image, packName, 0); proposals.add(proposal); } } catch (JavaScriptModelException e) { JavaScriptPlugin.log(e); } return (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[proposals.size()]); } private static Image getImage(ImageDescriptor descriptor) { return (descriptor == null) ? null : JavaPackageFragmentRootCompletionProcessor.IMAGE_DESC_REGISTRY.get(descriptor); } }