/*=============================================================================#
 # Copyright (c) 2017, 2021 Stephan Wahlbrink and others.
 # 
 # This program and the accompanying materials are made available under the
 # terms of the Eclipse Public License 2.0 which is available at
 # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
 # which is available at https://www.apache.org/licenses/LICENSE-2.0.
 # 
 # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
 # 
 # Contributors:
 #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
 #=============================================================================*/

package org.eclipse.statet.internal.r.ui.editors;

import org.eclipse.statet.jcommons.lang.NonNullByDefault;

import org.eclipse.statet.internal.r.ui.RUIPlugin;
import org.eclipse.statet.ltk.ui.sourceediting.assist.InsertEditorTemplateHandler;
import org.eclipse.statet.ltk.ui.sourceediting.assist.TemplateCompletionComputer;


@NonNullByDefault
public class InsertREditorTemplateHandler extends InsertEditorTemplateHandler {
	
	
	/** plugin.xml */
	public InsertREditorTemplateHandler() {
	}
	
	
	@Override
	protected TemplateCompletionComputer getComputer() {
		return (TemplateCompletionComputer)RUIPlugin.getInstance().getREditorContentAssistRegistry()
				.getComputer("org.eclipse.statet.r.contentAssistComputers.RTemplateCompletion"); //$NON-NLS-1$
	}
	
}
