package org.xpect.xtext.lib.setup; import java.io.IOException; import java.io.InputStream; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.xtext.resource.IResourceFactory; import org.xpect.XpectFile; import org.xpect.XpectJavaModel; import org.xpect.runner.IXpectURIProvider; import org.xpect.setup.XpectSetupFactory; import org.xpect.state.Creates; import org.xpect.state.StateContainer; import org.xpect.util.IXtInjectorProvider; import com.google.inject.Injector; @XpectSetupFactory public class FileSetupContext { private final StateContainer state; private final XpectFile xpectFile; public FileSetupContext(StateContainer state, XpectFile xpectFile) { super(); this.state = state; this.xpectFile = xpectFile; } @Creates() public FileSetupContext create() { return this; } public <T> T get(Class<T> expectedType, Object... annotations) { return state.get(expectedType, annotations).get(); } public StateContainer getState() { return state; } public XpectFile getXpectFile() { return xpectFile; } public URI getXpectFileURI() { return xpectFile.eResource().getURI(); } public Resource load(ResourceSet resourceSet, URI uri, InputStream input) throws IOException { Injector injector = IXtInjectorProvider.INSTANCE.getInjector(get(XpectJavaModel.class), uri); Resource resource = injector.getInstance(IResourceFactory.class).createResource(uri); resourceSet.getResources().add(resource); try { resource.load(input, null); } finally { if (input != null) input.close(); } return resource; } public URI resolve(String uri) { return get(IXpectURIProvider.class).resolveURI(getXpectFileURI(), uri); } @Override public String toString() { return xpectFile.toString(); } }