/******************************************************************************* * Copyright (c) 2005, 2012 eBay Inc. * 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 * *******************************************************************************/ package org.eclipse.vjet.eclipse.internal.ui.wizards; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.dltk.mod.ui.text.completion.CompletionProposalComparator; import org.eclipse.jface.contentassist.IContentAssistSubjectControl; import org.eclipse.jface.contentassist.ISubjectControlContentAssistProcessor; 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.vjet.dsf.jst.IJstType; import org.eclipse.vjet.dsf.jst.declaration.JstModifiers; import org.eclipse.vjet.eclipse.codeassist.CodeassistUtils; import org.eclipse.vjet.eclipse.core.search.TypeSearcher; import org.eclipse.vjet.eclipse.internal.ui.text.completion.JavaScriptCompletionProposal; import org.eclipse.vjet.eclipse.internal.ui.text.completion.VjoProposalLabelProvider; import org.eclipse.vjet.eclipse.internal.ui.text.completion.VjoProposalLabelUtil; public class VjoSuperTypeCompletionProcessor implements IContentAssistProcessor, ISubjectControlContentAssistProcessor { private CompletionProposalComparator fComparator; private static final String trigger = "."; private char[] fProposalAutoActivationSet; /** * Creates a <code>VjoPackageCompletionProcessor</code>. The Processor * uses the given <code>ILabelProvider</code> to show text and icons for * the possible completions. * * @param labelProvider * Used for the popups. */ public VjoSuperTypeCompletionProcessor() { fComparator = new CompletionProposalComparator(); fProposalAutoActivationSet = trigger.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 contentAssistSubjectControl, int documentOffset) { return null; } /* * @see ISubjectControlContentAssistProcessor#computeCompletionProposals(IContentAssistSubjectControl, * int) */ public ICompletionProposal[] computeCompletionProposals( IContentAssistSubjectControl contentAssistSubjectControl, int documentOffset) { String input = contentAssistSubjectControl.getDocument().get(); ICompletionProposal[] proposals = createSuperTypeProposals( documentOffset, input); Arrays.sort(proposals, fComparator); return proposals; } private ICompletionProposal[] createSuperTypeProposals(int documentOffset, String input) { ArrayList proposals = new ArrayList(); String prefix = input.substring(0, documentOffset); TypeSearcher s_typeSearcher = TypeSearcher.getInstance(); List<IJstType> list = s_typeSearcher.search(prefix); for (IJstType jstType : list) { // Filter the interface and native class. if (!jstType.isClass() || CodeassistUtils.isNativeType(jstType)) { continue; } Image image = null; JstModifiers modifies = jstType.getModifiers(); int flag = VjoProposalLabelUtil.getDltkModifyFlag(modifies); image = VjoProposalLabelProvider .getTypeImageDescriptor(flag, false); JavaScriptCompletionProposal proposal = new JavaScriptCompletionProposal( jstType.getName(), 0, input.length(), image, jstType .getName(), 0); proposals.add(proposal); } return (ICompletionProposal[]) proposals .toArray(new ICompletionProposal[proposals.size()]); } }