/**
 *                                                                            
 *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
 *                                                                            
 *  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:                                                      
 * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
 * 
 */
package org.eclipse.osbp.xtext.chart;

import org.eclipse.xtext.junit4.IInjectorProvider;

import com.google.inject.Injector;

public class ChartDSLUiInjectorProvider implements IInjectorProvider {
	
	public Injector getInjector() {
		return org.eclipse.osbp.xtext.chart.ui.internal.ChartDSLActivator.getInstance().getInjector("org.eclipse.osbp.xtext.chart.ChartDSL");
	}
	
}
