/******************************************************************************* * Copyright (c) 2010 Martin Schnabel <mb0@mb0.org>. * 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.axdt.as3.ui.contentassist; import org.axdt.as3.scoping.As3ImportScopeProvider; import org.axdt.as3.services.As3GrammarAccess; import org.eclipse.jface.viewers.StyledString; import org.eclipse.swt.graphics.Image; import org.eclipse.xtext.CrossReference; import org.eclipse.xtext.IGrammarAccess; import org.eclipse.xtext.Keyword; import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal; import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext; import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor; import com.google.inject.Inject; /** * @author mb0 * see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#contentAssist */ public class As3ProposalProvider extends AbstractAs3ProposalProvider { @Inject private IGrammarAccess grammarAccess; @Inject private As3ImportScopeProvider importScopeProvider; @Override public void completeKeyword(Keyword keyword, ContentAssistContext contentAssistContext, ICompletionProposalAcceptor acceptor) { String value = keyword.getValue(); //skip keywords if (value.equals("}")) { As3GrammarAccess grammar = (As3GrammarAccess) grammarAccess; CrossReference ref = grammar.getAs3PropertyIdentifierAccess().getReferenceAvmReferableCrossReference_1_0(); lookupCrossReference(ref, contentAssistContext, acceptor); } else if (Character.isLetter(value.charAt(0))) super.completeKeyword(keyword, contentAssistContext, acceptor); } protected ConfigurableCompletionProposal doCreateProposal(String proposal, StyledString displayString, Image image, int priority, ContentAssistContext context) { int replacementOffset = context.getReplaceRegion().getOffset(); int replacementLength = context.getReplaceRegion().getLength(); ConfigurableCompletionProposal result = null; if (proposal.contains(".")) { result = new As3QualifiedCompletionProposal(proposal, importScopeProvider, context.getCurrentModel(), replacementOffset, replacementLength, proposal.length(), image, displayString); result.setPriority(priority-400); } if (result == null){ result = doCreateProposal(proposal, displayString, image, replacementOffset, replacementLength); result.setPriority(priority); } result.setMatcher(context.getMatcher()); result.setReplaceContextLength(context.getReplaceContextLength()); return result; } }