| /******************************************************************************* |
| * Copyright (c) 2005, 2007 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 |
| * |
| |
| *******************************************************************************/ |
| package org.eclipse.dltk.javascript.internal.ui.templates; |
| |
| import org.eclipse.dltk.internal.javascript.typeinference.CompletionString; |
| import org.eclipse.dltk.javascript.internal.core.codeassist.JavaScriptCompletionUtil; |
| import org.eclipse.dltk.javascript.internal.core.codeassist.JavaScriptCompletionUtil.ExpressionType; |
| import org.eclipse.dltk.ui.templates.ScriptTemplateAccess; |
| import org.eclipse.dltk.ui.templates.ScriptTemplateCompletionProcessor; |
| import org.eclipse.dltk.ui.text.DocumentUtils; |
| import org.eclipse.dltk.ui.text.completion.ScriptContentAssistInvocationContext; |
| import org.eclipse.jface.text.IDocument; |
| import org.eclipse.jface.text.IRegion; |
| import org.eclipse.jface.text.ITextViewer; |
| import org.eclipse.jface.text.contentassist.ICompletionProposal; |
| import org.eclipse.jface.text.templates.Template; |
| import org.eclipse.jface.text.templates.TemplateContext; |
| import org.eclipse.jface.text.templates.TemplateContextType; |
| |
| /** |
| * JavaScript template completion processor |
| */ |
| public class JavaScriptTemplateCompletionProcessor extends |
| ScriptTemplateCompletionProcessor { |
| |
| private static final char[] IGNORE = new char[] { '.' }; |
| |
| public JavaScriptTemplateCompletionProcessor( |
| ScriptContentAssistInvocationContext context) { |
| super(context); |
| } |
| |
| @Override |
| protected String extractPrefix(ITextViewer viewer, int offset) { |
| int i = offset; |
| IDocument document = viewer.getDocument(); |
| if (i > document.getLength()) |
| return ""; |
| return CompletionString.parse(document.get().substring(0, offset), |
| false, true); |
| } |
| |
| /* |
| * @see ScriptTemplateCompletionProcessor#getContextTypeId() |
| */ |
| @Override |
| protected String getContextTypeId() { |
| return JavaScriptUniversalTemplateContextType.CONTEXT_TYPE_ID; |
| } |
| |
| /* |
| * @see ScriptTemplateCompletionProcessor#getIgnore() |
| */ |
| @Override |
| protected char[] getIgnore() { |
| return IGNORE; |
| } |
| |
| /* |
| * @see ScriptTemplateCompletionProcessor#getTemplateAccess() |
| */ |
| @Override |
| protected ScriptTemplateAccess getTemplateAccess() { |
| return JavaScriptTemplateAccess.getInstance(); |
| } |
| |
| @Override |
| protected boolean isValidPrefix(String prefix) { |
| return true; |
| } |
| |
| @Override |
| protected ICompletionProposal createProposal(Template template, |
| TemplateContext context, IRegion region, int relevance) { |
| return new JavaScriptTemplateProposal(template, context, region, |
| getImage(template), relevance); |
| } |
| |
| @Override |
| protected TemplateContextType getContextType(ITextViewer viewer, |
| IRegion region) { |
| if (isValidLocation(viewer, region)) { |
| final ExpressionType type = JavaScriptCompletionUtil |
| .evaluateExpressionType(getContext().getSourceModule(), |
| DocumentUtils.asCharSequence(viewer.getDocument()), |
| region.getOffset() + region.getLength()); |
| if (type == ExpressionType.OBJECT_INITIALIZER) { |
| return null; |
| } |
| if (type == ExpressionType.PROPERTY_INITIALIZER_VALUE) { |
| return getTemplateAccess() |
| .getContextTypeRegistry() |
| .getContextType( |
| JavaScriptExpressionTemplateContextType.EXPRESSION_CONTEXT_TYPE_ID); |
| } |
| } |
| return super.getContextType(viewer, region); |
| } |
| |
| } |