/**
 * Copyright (c) 2017 CEA.
 * 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:
 *     CEA - initial API and implementation and/or initial documentation
 */
/*
 * generated by Xtext 2.9.1
 */
package org.eclipse.sensinact.studio.language.ui;

import com.google.inject.Injector;
import org.eclipse.sensinact.studio.language.sensinact.ui.internal.SensinactActivator;
import org.eclipse.xtext.ui.guice.AbstractGuiceAwareExecutableExtensionFactory;
import org.osgi.framework.Bundle;

/**
 * This class was generated. Customizations should only happen in a newly
 * introduced subclass. 
 */
public class SensinactExecutableExtensionFactory extends AbstractGuiceAwareExecutableExtensionFactory {

	@Override
	protected Bundle getBundle() {
		return SensinactActivator.getInstance().getBundle();
	}
	
	@Override
	protected Injector getInjector() {
		return SensinactActivator.getInstance().getInjector(SensinactActivator.ORG_ECLIPSE_SENSINACT_STUDIO_LANGUAGE_SENSINACT);
	}
	
}
